有沒有辦法可以強制 Windows 上的應用程式成為單一實例應用程序,即,如果同一應用程式的另一個實例已經在運行,則不啟動?
理想情況下,我希望能夠做到這一點,而無需用存根替換實際應用程序,但如果確實有必要,我不介意使用存根。
答案1
通常,您必須將“單例”功能直接實作到應用程式中。如果您想「從外部」保護它,則必須使用包裝器來檢查是否已經有另一個實例正在運行。可能有更多的解決方案,但我曾經用過恩西斯。這個想法是這樣的:
- 創建一個“假安裝程式”,它本身只是您要啟動的應用程式的一個小包裝
- 使該安裝程式成為單例。看這裡僅允許一個安裝程式實例或者檢查您的應用程式是否正在運行
- 從“包裝安裝程式”啟動您的應用程式。看這裡ExecCmd 插件
- 對使用者「隱藏」正常的應用程式圖示並顯示該假安裝程式。由於您可以為其添加一個漂亮的圖標,因此您應該能夠使其看起來像原始程式。
答案2
除非有解決方法,否則您可以透過應用程式相容性套件啟用此功能 - 我對此表示懷疑(它本身不會破壞相容性1) - 那麼 Windows 中就沒有設定。
除了啟動器應用程式之外,另一種方法是監視新進程(例如Win32_Process
物件的 WMI 實例建立事件 - 當然透過會話過濾)並執行一些操作來阻止第二個實例。
1當然,如果應用程式使用不支援的機制來檢測自身的多個實例,則可能需要修復,因此檢測機制需要填充程式。