在 HKEY_CURRENT_USER\Software\ 底下寫入機碼就會預設出現在 HKEY_CURRENT_USER\Software\Wow6432Node\ 的同樣位置
同理在 HKEY_LOCAL_MACHINE\SOFTWARE\ 底下寫入機碼,就會出現在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 底下相同的位置
位置不變,只是多了一層 Wow6432Node 的資料夾,這是為了做 32-bits 應用程式與 64-bits 作業系統的對應而產生的結果。
其實一般來說不太需要特別注意這件事,應用程式的寫作上以原本的路徑在讀寫就行了,要不要指向 Wow6432Node 完全由作業系統來決定,但是有些例外,如果某些值作業系統只會去參考在原本的非 Wow6432Node 路徑下時,而這個值被寫到 Wow6432Node 的位置下就沒辦法發揮預期的效果了,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\ 就是一個例子,如果有一個 32-bits 的應用程式在此處寫入機碼,依前面所言,會被寫到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\\Microsoft\Windows\Windows Error Reporting\LocalDumps\ 裡面,而這樣是無效的,因為作業系統只會參考原本非 Wow6432Node 底下的機碼。
所以我們可加入一個新的參數,指定 32-bits 的應用程式在 64-bits 的作業系統下建立、讀取、寫入機碼時,不要在 Wow6432Node 下執行,而是在原本的位置做寫入,可以參考 MSDN 的說明:Accessing an Alternate Registry View
參數分別為 KEY_WOW64_64KEY:Access a 64-bit key from either a 32-bit or 64-bit application.
與 KEY_WOW64_32KEY:Access a 32-bit key from either a 32-bit or 64-bit application.
以 RegCreateKeyEx 作示範就像這樣
if (ERROR_SUCCESS != RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\Windows Error Reporting\\LocalDumps\\MyApp.exe"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_WOW64_64KEY, NULL, &hKey, &disp))
{
return;
}
如此 MyApp.exe 這個機碼就不會出現在 Wow6432Node 底下,而是正常 64-bits 作業系統該放的 Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\ 位置底下
沒有留言:
張貼留言