我有一個32位應用程序,它可以根據運行的計算機運行第32或64位應用程序。如何使用32位進程查找64位進程信息
我只希望一次運行第二個應用程序的一個實例,並且我需要第一個應用程序來防止第二個應用程序多次啓動。
我想能夠使用GetProcessesByName來獲取正在運行的進程。這似乎工作正常。這是當我試圖獲取模塊數據,以找出哪些文件夾的第二個應用程序運行,從事情崩潰。
有沒有人有建議從32位應用程序中識別64位進程及其原始文件夾?
謝謝 SH
我有一個32位應用程序,它可以根據運行的計算機運行第32或64位應用程序。如何使用32位進程查找64位進程信息
我只希望一次運行第二個應用程序的一個實例,並且我需要第一個應用程序來防止第二個應用程序多次啓動。
我想能夠使用GetProcessesByName來獲取正在運行的進程。這似乎工作正常。這是當我試圖獲取模塊數據,以找出哪些文件夾的第二個應用程序運行,從事情崩潰。
有沒有人有建議從32位應用程序中識別64位進程及其原始文件夾?
謝謝 SH
我覺得如果你啓動第二應用程序時設置的互斥它可能是更容易。
在主應用程序,你可以這樣做:如果互斥鎖不存在運行第二應用(運行時創建互斥和關閉時釋放),否則你跳過...
EDITED: 可以不要編輯第二個應用程序來插入互斥體的創建,好的。
但是你可以在主要應用做到這一點:
BackgroudWorker wrk
bool running = false
if (running) return; running = true;
running = false
只是一個想法...
再次編輯:
如果關閉第一個應用程序,並重新打開它,用戶能夠再次運行第二應用程序。
所以,你可以這樣做:
BackgroudWorker wrk
使用這種方法,即使用戶退出第一個應用程式,tmp文件仍保留在HDD;所以當用戶再次運行第一個應用時,第二個應用將不會被執行。
請記住,如果用戶是智能足以undestand這個,他可以manully刪除文件和訣竅完成。
最後:你確定用戶不能直接運行第二個應用程序?
您可以對此使用WMI API(System.Management
名稱空間),特別是ManagementObjectSearcher。下面的示例顯示從所有正在運行的記事本實例中獲取進程標識和完整命令行。
Imports System.Management
Module Module1
Sub Main()
Dim wmi = New ManagementObjectSearcher("SELECT ProcessId, CommandLine FROM Win32_Process WHERE CommandLine LIKE ""%notepad%""")
Dim result = wmi.Get().OfType(Of ManagementObject)()
For Each r In result
Console.WriteLine("Process ID: {0}, Command Line: {1}" r("ProcessId"), r("CommandLine"))
Next
End Sub
End Module
你確定上面顯示的代碼,當作爲32位進程的一部分運行時,可以從64位進程獲取信息?我試着輸入你的代碼,但收到語法錯誤。我完全不熟悉WMI API。 – Superhuman 2011-05-14 04:50:16
我已經在其他應用程序中完成了這項工作。我無法編輯第二個應用程序。完全取決於第一個應用程序來識別流程並確定從特定文件夾啓動哪些流程(如果有)。 – Superhuman 2011-05-02 21:06:50
對不起,我沒有意識到你無法編輯第二個應用程序。 – Marco 2011-05-02 21:08:39
我認爲我的解決方案更安全,然後檢查流程,因爲要做到這一點,您**必須是管理員(並且可能隱藏某個流程) – Marco 2011-05-02 21:20:47