Все,
Я исследовал Интернет и нашел более чем несколько потенциальных решений, но продолжаю получать ошибки на компьютере с Windows 7.
Вот совок.У меня есть приложение, написанное на VB.NET, которое запускает консольное приложение.Консольное приложение будет работать независимо от моего приложения VB.NET, поэтому пользователь может закрыть и перезапустить приложение VB.NET и, возможно, запустить второй сеанс консольного приложения из той же установки.
Я нехочу это.Я хочу идентифицировать экземпляры запущенного консольного приложения при запуске моего приложения VB и отключить возможность запуска консольного приложения второй, третий и т. Д.время.Но ... Я хочу отключить эту возможность, только когда консольное приложение было запущено из той же папки, что и приложение VB.NET.
Вот код, который я сейчас использую: Открытая функция CheckForConsoleApp () As Boolean 'Проверить, запущено ли консольное приложение в этой папке.Верните значение true, если это так.
Dim p() As System.Diagnostics.Process
p = System.Diagnostics.Process.GetProcessesByName("MyConsoleApp")
If p.Length = 0 Then return false
Dim Path As String = My.Application.Info.DirectoryPath
Dim i As Integer
For i = 0 To p.Length - 1
Dim pPath As String = p(i).MainModule.FileName
pPath = pPath.Substring(0, pPath.LastIndexOf("\"))
if pPath = Path Then Return True
Next i
Return False
End Function
В моей системе (32-разрядная Windows XP) это не проблема, и она работает каждый раз.На 64-битной машине Windows 7 с коллегой генерируется ошибка, что только часть «ReadProcessMemory или WriteProcessMemory» может быть выполнена.Использование файлов журнала и другие попытки показали, что строка:
Dim pPath As String = p(i).MainModule.FileName
- это место, где происходит сбой.
Наше приложение должно работать на компьютерах с Windows 7, Vista и XP, как на 32-разрядных, так и на 64-разрядных платформах.Я обнаружил, что команды WinAPI применяют разрешения на чтение / запись к определенным областям памяти, но они специально использовались с командами API ReadProcessMemory, поэтому мне еще предстоит узнать, как применять подобные команды в .NET.?Спасибо, SH