所有,找到可靠的路徑的過程...贏得XP,Vista和Windows 7
我已經研究了互聯網,發現多了幾個可能的解決方案,但我一直在Windows 7機器上得到錯誤。
這裏是獨家新聞。我有一個用VB.NET編寫的應用程序,它啓動一個控制檯應用程序。控制檯應用程序將獨立於我的VB.NET應用程序運行,因此用戶可以關閉並重新啓動VB.NET應用程序,並可能從同一安裝中啓動第二個控制檯應用程序會話。
我不想要這個。我想在我的VB應用程序啓動時識別正在運行的控制檯應用程序的實例,並禁用第二,第三,...等運行控制檯應用程序的能力。時間。但是......我只想在控制檯應用程序從與VB.NET應用程序相同的文件夾啓動時禁用此功能。
以下是我目前使用的代碼: Public Function 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
行是發生故障的地方。
我們的應用程序必須在32位和64位平臺上的Windows 7,Vista和XP機器上運行。我發現WinAPI命令對某些內存位置應用讀/寫權限,但這些命令專門用於ReadProcessMemory API命令,所以我還沒有看到如何在.NET中應用類似的命令。
幫助? 謝謝, SH