2011-10-09 242 views
2

我正在開發一個應用程序在C++中有一個選項「自動啓動」。當用戶設置該選項時,程序應在Windows中更改,以便在Windows啓動和用戶登錄時由Windows啓動。此外,當用戶取消設置該選項時,該程序必須重新啓動。C++應用程序自動運行在Windows啓動

我不需要運行應用程序作爲服務,所以它足以在用戶登錄後在某個用戶的帳戶下運行。那麼讓Windows運行我的應用程序的最佳方式是什麼?在下次啓動和用戶登錄?我搜索了一個使用啓動文件夾的建議。這是最好的和無害的方式?

如果是這樣,我有2個問題:

  1. 如何檢測啓動文件夾。我不喜歡SHGetSpecialFolderLocation()的輸出。它似乎在測試WinXP平臺(C:\ Documents and Settings \%username%)時返回我的「HOME」目錄。
  2. 如何使用C++創建.lnk文件?我認爲複製整個.exe文件是不好的主意。

其實我的程序是跨平臺的,但是「自動啓動」選項只能用於windows。

更新

  1. 嘗試SHGetSpecialFolderLocation並在Windows7中得到了良好的價值: 「C:\用戶\帕維爾\應用程序數據\漫遊\微軟\的Windows \開始菜單\程序\啓動」 注意:如果你使用MinGW,你應該在包含ShlObj.h之前將_WIN32_IE定義爲0x0400。

  2. 什麼是使用註冊表(HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Run)和啓動文件夾之間的最佳解決方案(在觀點良好的編程)?

+1

對於所有用戶或只是當前登錄的用戶? –

回答

3

我建議使用註冊表項,如HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run。在這裏用您的軟件名稱和主要可執行文件路徑的值創建一個字符串值 - 這應該就足夠了。要容易得多然後創建一個.lnk文件 - 和註冊表編輯API是交通方便,距C++

UPDATE:

由於@Ben建議,您的任務是更好地使用HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run。這將只爲當前用戶自動啓動您的應用,而我的第一個建議將爲所有用戶執行此操作。

UPDATE2:

另外請注意,任何你選擇實現自動啓動,你可能會得到與殺毒軟件最具有主動防禦反病毒軟件的正在密切關注有關使程序自動運行的問題。

+3

更好:在HKEY_CURRENT_USER而不是HKLM下執行。 –

+0

@當然不同的意思,但不是所有的立場更好? –

+0

@ BenVoigt:你是對的;相應更新了我的答案。 –

0

要明確起見,啓動文件夾項目發生在登錄時,不啓動。這聽起來像你想要的,我只想直接得到這些條款。

我想你其實想要SHGetSpecialFolderPathCSIDL_STARTUP不變。如果我正確閱讀文檔,應該給你想要的路徑。

0

使用SHGetSpecialFolderPath確定啓動文件夾的路徑(請參閱Michael Kohne的答案)。

然後使用IShellLink爲了在此文件夾中創建一個快捷方式。

編輯:我認爲使用註冊表中的運行鍵更可靠。

相關問題