2011-03-07 67 views
0

所有,找到可靠的路徑的過程...贏得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

回答

0

我一直在尋找解決這個問題幾天甚至幾周。我昨天放棄了希望,並在此發佈了一個問題,今天重新編寫了我的搜索,發現聽起來像是一個答案。

它的要點是尋找其他處理數據的過程是一個x86的過程,並試圖找到在x64數據處理方法。這是我的應用程序失敗的原因。有沒有人有建議如何解決它?

http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/ca5fc242-fbc0-4b5b-be86-4cbd3824211b?prof=required

這是一個相當長的線,但如果你搜索「查爾」(這篇文章的作者的名字),你會發現什麼,我認爲是在回答我的問題。它可能不適用於所有其他問題,但我認爲這是我的情況。

SH

2

我不知道,如果你發現你的解決方案,但你需要設置你的構建選項爲「任何CPU」,而不是X86然後正常工作對我來說。

相關問題