我的應用程序在啓動時檢查是否有任何其他實例正在運行,如果是,則會關閉所有其他實例。爲此,我嘗試使用Process.GetProcessByName(「AppName」)函數,並將AppName的所有進程存儲在進程[]數組中。現在我想找到當前實例的PID,這樣我可以關閉我的應用程序的所有其他實例(顯然它們具有相同的名稱,但具有不同的PID)。但是,即使經過大量的谷歌搜索,我仍然無法找到。另外我怎樣才能找到我的應用程序的一個實例的PID,我使用從AppName.exe中調用的Process.Start(「AppName.exe」)函數創建的如何在運行時使用C#獲得我的應用程序的PID#
0
A
回答
0
OK,與我的其他解決方案的特定問題,請參閱以下
爲了進程之間鉤,你需要某種形式的IPC的。要使用EventWaitHandles之間的共享句柄的簡單性,可以讓每個程序監聽取消標誌。
public static EventWaitHAndle CancellationEvent =
new EventWaitHandle(
false,
EventResetMode.AutoReset,
"MyAppCancel");
private object lockObject = new object();
後來......
Task.Run(() =>
{
while(true)
{
CancellationEvent.WaitOne();
lock(lockObject)
if(!thisIsCalling) // static bool to prevent this program from ending itself
Environment.Exit(0);
}
}
,然後調用取消像這樣
lock(lockObject)
{
thisIsCalling = true;
CancellationEvent.Set();
thisIsCalling = false;
}
+0
謝謝。它似乎工作正常。乾杯。 :) – Sanyam 2014-10-19 23:05:40
0
爲什麼不直接檢查您的當前處理?
var processes = Process.GetProcessByName("AppName");
foreach (var p in processes)
{
if (p != Process.GetCurrentProcess())
p.CloseMainWindow();
}
0
如果您有興趣關閉應用程序的其他實例,爲什麼不做相反的事情並防止多個實例首先打開?使用的EventWaitHandle可正是如此做:
bool created;
var eve = new System.Threading.EventWaitHandle(
false,
EventResetMode.AutoReset,
"MyAppHandle",
out created);
if(!created)
{
eve.Set();
Environment.Exit(-1); // Always use an exit error code if you're expecting to call from the console!
}
手柄參數,在這種情況下,「MyAppHandle」,將整個系統共享,從而意味着不僅將out created
paramete放在次要instaces假的,但你可以使用eve.Set()
使句柄觸發acorss應用程序。設置一個監聽線程,當您嘗試打開第二個實例時,這可以允許消息循環顯示消息。
Task.Run(() =>
{
while(true)
{
eve.WaitOne();
// Display an error here
}
}
相關問題
- 1. 從所有正在運行的應用程序獲得PID(Android)
- 2. 如何獲得在c程序中使用system()啓動的進程的PID
- 3. 如何獲取我的應用程序運行時間?
- 4. 如何獲得運行我的應用程序的所有用戶的列表?
- 5. 如何獲得在我的主機上運行的ASP.Net MVC應用程序?
- 6. 如何獲得在C#中使用給定文件名的PID?
- 7. 使用JNI獲取運行時進程的PID
- 8. 如何在trustedinstaller帳戶下運行我的「C#」應用程序?
- 9. 獲得在C#創建進程的PID
- 10. 我如何使用appcelerator運行我的Windows應用程序?
- 11. 如何獲得rails 2.3.3應用程序在fastcgi上運行Bluehost
- 12. 如果程序使用sudo運行,我如何獲得用戶真正的uid?
- 13. 獲取殺死我的應用程序的進程的PID
- 14. 如何在C#中啓動應用程序的PID#
- 15. 我如何獲得我的應用程序的所有用戶
- 16. 如何在iphone中獲取特定應用程序的PID?
- 17. 如何獲得運行應用程序的單個RAM使用情況?
- 18. c# - 我如何使應用程序作爲服務運行?
- 19. 我可以在應用程序運行時卸載我的應用程序
- 20. 我如何在我的iPhone應用程序中獲得方向
- 21. Android獲得其他應用程序的PID
- 22. 如何確定我的應用程序何時運行?
- 23. 如何構建我的應用程序以在網站上運行時使用localStorage,以及如何作爲Chrome應用程序運行時使用chrome.storage?
- 24. 我如何運行Spring應用程序?
- 25. 如何在Heroku上運行Rails時獲得應用程序名稱?
- 26. 如何獲得Windows的運行的應用程序不是所有的過程
- 27. 在我的網站上運行python,C,C++應用程序
- 28. 如何在運行時獲取應用程序ID
- 29. 獲得Rails應用程序運行在IronRuby的機架
- 30. 如何使我的WPF應用程序在運行Windows操作系統時運行c#
[獲得在C#創建進程的PID]的可能重複(HTTP:/ /stackoverflow.com/questions/2539920/getting-a-pid-of-a-process-created-in-c-sharp) – Chris 2014-10-19 22:33:47