2011-11-28 31 views
0

我想打開一個現有的實例,如果我的程序已經運行,只有當它運行相同的版本。我注意到這個問題只被要求存在名稱,但如果版本較舊,我只想通知用戶舊版本仍在運行,請在開始此版本之前刪除舊版本。如果用戶嘗試在相同版本的情況下打開新實例,那麼返回已打開的應用程序?

另一個鏈接是這一個: Return to an already open application when a user tries to open a new instance但他們不會談論如果檢測到舊版本或更新版本關閉實例。

+1

獲取所有進程列表和foreach程序集名稱,版本等。如果找到相同的assemblyName和version - 關閉您的實例。 –

+0

是否有可能將這兩者合併在一起......哎呀 – RetroCoder

回答

3

在最簡單的方法,使檢查這樣的:

foreach (var proc in Process.GetProcesses()) 
      if (proc.MainModule.FileName == Process.GetCurrentProcess().MainModule.FileName) 
       //Shutdown your copy. 

但更復雜的事情可能是這樣的:

foreach (var proc in Process.GetProcesses()) 
     { 
      if (proc.Id == Process.GetCurrentProcess().Id) continue; 
      var currName = AssemblyName.GetAssemblyName(Process.GetCurrentProcess().MainModule.FileName); 
      var procName = AssemblyName.GetAssemblyName(proc.MainModule.FileName); 
      if (currName.FullName == procName.FullName && /*and other parameters*/) 
       return; 
     } 

祝你好運!

P.S.:"但請注意 - 「GetAssemblyName」僅適用於託管代碼程序集,因此請使用try-catch wrap。「

+0

感謝您的評論。如果更新的版本,當前版本和舊版本,是否有可能在決策樹上進行更深入的研究。我知道Windows安裝程序可以執行某些操作來檢測這一點。謝謝 – RetroCoder

相關問題