簡體   English   中英

從32位安裝程序寫入64位注冊表

[英]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.

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