从32位安装程序写入64位注册表

时间:2012-03-19 15:01:38

标签: installer registry 32bit-64bit wise

我有一个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位注册表视图中创建此注册表项?或者除了创建注册表项之外,还有更好的方法来设置此属性吗?

6 个答案:

答案 0 :(得分:4)

我不确定Wise为脚本编写提供了什么可能性,但是从常规程序访问64位注册表的方法是在操作注​​册表时使用 KEY_WOW64_64KEY

如果有可能至少从设置中运行外部EXE文件,它应该可以解决您的问题。

答案 1 :(得分:4)

我不确定在提出此问题时是否可以使用此解决方案,但您可以创建执行REG ADD命令并包含/reg:64开关的自定义操作,如下所示:< / p>

REG ADD "HKLM\Software\Example" /v "Name" /t REG_SZ /d "Data" /reg:64

/reg:64开关将强制它进入64位注册表。我不完全确定这将在32位系统上做什么,但我预计它可能会被忽略。

答案 2 :(得分:0)

通常,您无法从32位应用程序访问64位注册表。我找到了一些代码,用于PowerShell,允许您通过WMI访问64位注册表:http://gallery.technet.microsoft.com/scriptcenter/6062bbfc-53bf-4f92-994d-08f18c8324c0

但是,我不确定你是否可以在Wise中使用它。您可以使用Windows Installer XML代替它,并创建一个64位MSI。

答案 3 :(得分:0)

我也使用Wise并且必须支持32位和64位窗口。我使用批处理文件调用reg.exe删除和查询64位注册表项已经取得了一些成功。您应该能够使用相同的技术来添加和修改注册表。我查找“程序文件(x86)以确定它是否是64位窗口。如果没有,我明智地使用本机注册表控件,否则,我使用传入参数的批处理文件.Reg.exe应该在你的路径中。转到dos提示符并输入reg /?以获取语法。

我有一个regtest.bat,其中包含以下内容: reg.exe查询%1 / v%2&gt; %3

第一个参数是注册表项,第二个是值,第三个是写入的文本文件。

我的regdelete.bat包含: reg.exe delete%1 / f param是您要删除的注册表项。

答案 4 :(得分:0)

虽然使用Reg.exe查询注册表,但问题仍然存在 因为当Wise调用bat文件时,reg查询找不到64位密钥(只能找到32位密钥)。

答案 5 :(得分:0)

您也可以使用

c:\Windows\SysNative\REG.exe ADD "HKLM\Software\Example" /v "Name" /t REG_SZ /d "Data"

这将强制使用reg.exe的64位版本。当然,如果您使用的是32位操作系统,那将是行不通的。因此,您应该检查操作系统的类型,然后调用正确的reg.exe程序(对于32位操作系统,请选择c:\ Windows \ System32,对于64位操作系统,请选择C:\ Windows \ SysNative)。 / p>

如果环境变量PROCESSOR_ARCHITEW6432是64位操作系统,则其值为AMD64;如果是32位操作系统,则为空。