我正在使用Process Class來啓動進程,但不希望運行任何程序的多個實例。看看文檔,有很多可能看起來的屬性,但沒有什麼突出的最明顯的。Process Class是否可用於確定進程是否已在運行?
確定過程是否正在運行的最佳方法是什麼?
編輯:約翰費舍爾是正確的:這是一個現有的應用程序,我開始,我無法修改它。
我正在使用Process Class來啓動進程,但不希望運行任何程序的多個實例。看看文檔,有很多可能看起來的屬性,但沒有什麼突出的最明顯的。Process Class是否可用於確定進程是否已在運行?
確定過程是否正在運行的最佳方法是什麼?
編輯:約翰費舍爾是正確的:這是一個現有的應用程序,我開始,我無法修改它。
您可以調用此方法
Process.GetProcesses()
和遍歷結果(類型流程的集合),看名稱相匹配。類似這樣的:
foreach (Process prc in Process.GetProcesses())
{
if (prc.ProcessName.Contains(MyProcessName))
{
//Process is running
}
}
您應該使用的是辛格爾頓應用模式:
bool createdNew = true;
using (var mutex = new Mutex(true, "YourProcessName", out createdNew))
{
if (createdNew)
{
// Run application
}
}
我想這一切都取決於你所說的「最好方式」是什麼?你的意思是最快,最準確還是會處理一些奇怪的情況?
我要開始的方式是列出進程並檢查可執行文件名稱與我試圖啓動的進程。如果它們匹配(不區分大小寫),它可能正在運行。
這隻有在他試圖啓動他編寫的應用程序並且可以修改時纔有效。 – 2010-10-12 16:06:35