關於Windows7 64的登錄檔讀寫問題
阿新 • • 發佈:2019-01-05
最近在寫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位登錄檔裡的開機自啟動是無效的