2011-05-12 34 views
5

我正在使用vs2005 C++在Windows中開發應用程序,並且希望將文件擴展名關聯到我可以在註冊表設置中執行的應用程序。但是,當我單擊文件時,我想將它與正在運行的應用程序實例關聯,而不是啓動一個新的應用程序。我如何實現這種行爲。將文件類型關聯到正在運行的應用程序

+0

+1。好問題。 – Nawaz 2011-05-12 04:44:48

回答

1

我不能給你一個關於我的頭頂的實現,但看看「進程間通信」(通常如果你在Windows上使用COM)。你可以做的是,當你的程序啓動時,檢查自己的其他副本,如果它找到一個,那麼它會告訴你一個你想要打開的文件,然後關閉它。

我發現了一個實現你:

http://www.flounder.com/nomultiples.htm

1

這用於與WinMain函數中的參數進行,但是從msdn

的句柄應用程序的一個實例。該參數始終爲NULL。如果您需要檢測另一個實例是否已經存在,請使用CreateMutex函數創建一個唯一命名的互斥鎖。即使互斥量已經存在,CreateMutex也會成功,但該函數將返回ERROR_ALREADY_EXISTS。這表明應用程序的另一個實例存在,因爲它首先創建了互斥鎖。但是,惡意用戶可以在創建該互斥鎖之前創建該互斥鎖,並阻止應用程序啓動。爲了防止出現這種情況,請創建一個隨機命名的互斥體並存儲名稱,以使其只能由授權用戶獲取。或者,您可以爲此使用文件。要將您的應用程序限制爲每個用戶一個實例,請在用戶的配置文件目錄中創建一個鎖定的文件。

相關問題