2016-11-02 61 views
1

我通過NSIS安裝程序爲我的應用程序打包。在包裝我需要爲我的應用程序做一些註冊表項。這些條目將位於註冊表路徑「HKLM \ SOFTWARE \ Wow6432Node \ Microsoft」和「HKLM \ SOFTWARE \ Microsoft」中。導入NSIS中的註冊表項時出錯

問題是當我通過NSIS中的[ExecWait「regedit.exe/s registry.reg」]命令導入註冊表時,註冊表項不會被添加到路徑「HKLM \ SOFTWARE \ Microsoft」 ,只有在其他條目中才會添加。並且在NSIS安裝程序中,將會有一個來自任何地方的「HKLM \ SOFTWARE \ Wow6432Node \ Wow6432Node \ Microsoft」路徑中的新條目,因爲我沒有在註冊表文件中包含任何類似註冊表項。

我檢查了註冊表文件,它沒有問題。我試圖通過直接運行註冊表文件,並直接在bat文件以及CMD(regedit.exe/s registry.reg)中嘗試相同的命令。所有工作都很好。只有在NSIS中它不起作用。任何幫助都會很棒。

編輯: 操作系統:Windows 7,64位

NSIS版本:2.46

回答

1

我猜你的應用程序NSIS安裝是32位。 由於它是一個32位安裝程序,每個註冊表操作都會通過應用兼容性關鍵字「Wow6432Node」的窗口自動轉換。 看到這個link有關注冊表重定向

爲您的代碼的32位和64位註冊表之間的切換應該是這樣的:

SetRegView 64 
WriteRegDWORD HKLM "SOFTWARE\<Key1>\<Key2>" "Value" 0 
SetRegView 32 
WriteRegStr HKLM "SOFTWARE\<Key1>\<Key2>" "Value" "1" 

因爲NSIS都有自己的本地函數用於修改Windows註冊表,使用ExecWait regedit.exe /s registry.reg是不是一個好主意

+0

我有我的註冊表條目的reg文件。是的,我可以使用默認功能,如WriteRegStr和SetRegView使用'Reg2nsis'應用程序來轉換我的reg文件,但問題是,這個轉換器應用程序中存在一個錯誤,它在轉換時給出錯誤的註冊表值。所以我下降了使用默認功能 –

+0

的選項,如果你想轉換一個包含對Wow6432Node的直接引用的註冊表文件,Reg2nsis可能無法正常工作,你必須手動執行 – cristallo

+0

你可以嘗試運行C:\ Windows \ Syswow64 \ REGEDIT/s MYapp.reg 這是一個非常骯髒的解決方案,我不確定它是否能正常工作 – cristallo

1

只要從32位應用程序調用Exec "regedit.exe"將啓動32位註冊表編輯器,並導致Wow6432Node \ Wow6432Node問題。

真正的解決辦法是使用Reg2Nsis或其他轉換工具將您的.reg文件轉換爲WriteRegStrSetRegView說明。

您可以嘗試在運行64位註冊表編輯器這種醜陋的黑客:

!include x64.nsh 
${DisableX64FSRedirection} 
ExecWait '"$WinDir\Regedit.exe" /whatever' 
${EnableX64FSRedirection} 
+0

我不知道爲什麼」DisableX64FSRedirection「工作不正常以及」RunningX64「也不工作,這是x64.nsh。 現在問題解決了,當我手動重定向任何需要的地方。 –