![](/img/trans.png)
[英]Use one NSIS installer to install 32-bit binaries on 32-bit OS and 64-bit binaries on 64-bit OS possible?
[英]Writing to 64-bit registry from 32-bit installer
我有一個32位應用程序和一個32位安裝程序,用Wise Installation Studio編寫。 我知道 ......我不應該使用Wise,我應該改用別的東西。 但就目前而言,我堅持不懈。
我們的應用程序是圖形密集型並且為了提高性能,我們希望它在運行時禁用桌面組合(Windows Aero)。 我們通過在以下位置添加注冊表項在32位系統上完成了此操作:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
值為DISABLEDWM
。
這將在默認情況下檢查EXE屬性的兼容性選項卡中設置“禁用桌面組合”復選框。
這在32位系統上運行良好,但在64位系統上運行安裝程序時,Windows會將注冊表項的創建重定向到HKLM\\SOFTWARE\\Wow6432Node
,並且標志未正確設置。 如果我在64位注冊表視圖中手動創建一個條目,那么它的工作原理。
那么如何強制在我們的32位安裝程序的64位注冊表視圖中創建此注冊表項? 或者除了創建注冊表項之外,還有更好的方法來設置此屬性嗎?
我不確定在提出此問題時是否可以使用此解決方案,但您可以創建執行REG ADD
命令並包含/reg:64
開關的自定義操作,如下所示:
REG ADD "HKLM\Software\Example" /v "Name" /t REG_SZ /d "Data" /reg:64
/reg:64
開關將強制它到64位注冊表。 我不完全確定這將在32位系統上做什么,但我預計它可能會被忽略。
我不確定Wise為腳本編寫提供了什么可能性,但是從常規程序訪問64位注冊表的方法是在操作注冊表時使用KEY_WOW64_64KEY 。
如果至少可以從設置中運行外部EXE文件,它應該可以解決您的問題。
我也使用Wise並且必須支持32位和64位窗口。 我使用批處理文件調用reg.exe刪除和查詢64位注冊表項已經取得了一些成功。 您應該能夠使用相同的技術來添加和修改注冊表。 我查找“程序文件(x86)以確定它是否是64位窗口。如果沒有,我明智地使用本機注冊表控件,否則,我使用傳入參數的批處理文件.Reg.exe應該在你的路徑中轉到dos提示符並輸入reg /?以獲取語法。
我有一個regtest.bat,其中包含以下內容:reg.exe查詢%1 / v%2>%3
第一個參數是注冊表鍵,第二個是值,第三個是寫入的文本文件。
我的regdelete.bat包含:reg.exe delete%1 / f param是您要刪除的注冊表項。
雖然使用Reg.exe查詢注冊表,但問題仍然存在因為當Wise調用bat文件時,reg查詢找不到64位密鑰(只能找到32位密鑰)。
你也可以用
c:\Windows\SysNative\REG.exe ADD "HKLM\Software\Example" /v "Name" /t REG_SZ /d "Data"
這會強制使用64位版本的reg.exe。 當然,如果您使用的是32位操作系統,那就不會起作用了。 因此,您應該檢查操作系統類型,然后調用正確的reg.exe程序(32位操作系統的c:\\ Windows \\ System32或64位操作系統的C:\\ Windows \\ SysNative)。
如果是64位操作系統,則環境變量PROCESSOR_ARCHITEW6432將具有AMD64的值,如果是32位操作系統,則為空。
通常,您無法從32位應用程序訪問64位注冊表。 我找到了一些代碼,用於PowerShell,允許您通過WMI訪問64位注冊表: http : //gallery.technet.microsoft.com/scriptcenter/6062bbfc-53bf-4f92-994d-08f18c8324c0
但是,我不確定你是否可以在Wise中使用它。 您可以使用Windows Installer XML ,並讓它創建一個64位MSI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.