2013-01-16 66 views
0

我在C#中有一個控制檯應用程序,我想限制我的應用程序一次只運行一個實例。它在一個系統中工作正常。當我嘗試在另一個系統中運行exe時,不工作問題是在一臺電腦,我只能打開一個exe文件。當我嘗試在另一臺電腦上運行時,我可以打開多個exe文件。如何解決此問題?以下是我寫的代碼。互斥體結果在系統中有所不同

string mutexId = Application.ProductName; 
using (var mutex = new Mutex(false, mutexId)) 
{ 
    if (!mutex.WaitOne(0, false)) 
    { 
     MessageBox.Show("Instance Already Running!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); 
     return; 
    } 

     //Remaining Code here 
} 
+0

其他什麼系統是不工作的,你可以更特定的JEMI – MethodMan

+0

你是否指另一個系統?另一臺PC? –

+4

「它不工作」是*從來沒有足夠的細節。你應該*總是*解釋你期望看到什麼以及你實際看到的是什麼。 –

回答

0

我反而反正用這個辦法:

// Use a named EventWaitHandle to determine if the application is already running. 

bool eventWasCreatedByThisInstance; 

using (new EventWaitHandle(false, EventResetMode.ManualReset, Application.ProductName, out eventWasCreatedByThisInstance)) 
{ 
    if (eventWasCreatedByThisInstance) 
    { 
     runTheProgram(); 
     return; 
    } 
    else // This instance didn't create the event, therefore another instance must be running. 
    { 
     return; // Display warning message here if you need it. 
    } 
} 
0

我的好老辦法:

private static bool IsAlreadyRunning() 
    { 
     string strLoc = Assembly.GetExecutingAssembly().Location; 
     FileSystemInfo fileInfo = new FileInfo(strLoc); 
     string sExeName = fileInfo.Name; 
     bool bCreatedNew; 

     Mutex mutex = new Mutex(true, "Global\\"+sExeName, out bCreatedNew); 
     if (bCreatedNew) 
      mutex.ReleaseMutex(); 

     return !bCreatedNew; 
    } 

Source