簡體   English   中英

在NSIS中導入注冊表項時出錯

[英]Error while importing registry entries in NSIS

我正在通過NSIS設置為我的應用程序包裝。 在包裝器中,我需要為我的應用程序做一些注冊表項。 這些條目將位於注冊表路徑“ HKLM \\ SOFTWARE \\ Wow6432Node \\ Microsoft”和“ HKLM \\ SOFTWARE \\ Microsoft”中。

問題是當我通過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

我猜您的應用程序nsis安裝程序適用於32bit。 由於它是32位安裝程序,因此每個注冊表操作都會由Windows應用兼容密鑰“ Wow6432Node”自動轉換。 看到此鏈接有關注冊表重定向

在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並不是一個好主意

僅從32位應用程序調用Exec "regedit.exe"就會啟動32位Regedit,這會導致Wow6432Node \\ Wow6432Node問題。

真正的解決方案是使用Reg2Nsis或其他轉換工具將您的.reg文件轉換為WriteRegStrSetRegView指令。

您可以嘗試使用此丑陋的技巧運行64位Regedit:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM