1. 程式人生 > >關於Windows7 64的登錄檔讀寫問題

關於Windows7 64的登錄檔讀寫問題

最近在寫c++程式的時候因為要用到開機啟動 所以就要讀寫登錄檔

RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", NULL, KEY_WRITE, &hKey);

這是原來的程式碼 結果發現在虛擬機器 winxp下執行可以寫入 , win7 64失敗
實際上,登錄檔是寫成功了
但他寫到這個位置去了
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
而我們希望的是這個位置
SOFTWARE\Microsoft\Windows\CurrentVersion\Run

這個原因是因為win764有著一個重定向功能,win764有著兩個系統檔案 一個64位 一個32位 這就是為什麼他比winxp大兩倍的原因

我們的程式是win32的自然就被放到32位的資料夾去了

下面說一下解決辦法

RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", NULL, KEY_WRITE|KEY_WOW64_64KEY, &hKey);

其實就是在讀寫許可權後面加上了|KEY_WOW64_64KEY 這樣就解決問題了

另外寫在32位登錄檔裡的開機自啟動是無效的