[英]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文件轉換為WriteRegStr
和SetRegView
指令。
您可以嘗試使用此丑陋的技巧運行64位Regedit:
!include x64.nsh
${DisableX64FSRedirection}
ExecWait '"$WinDir\Regedit.exe" /whatever'
${EnableX64FSRedirection}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.