维克斯:写在HKCU \\ SOFTWARE \\类注册条目\\ Wow6432Node(Wix:

2019-11-02 03:41发布

我有一个超级简单的安装测试是否安装程序可以写在HKCU \ Software \ Classes下注册条目\ Wow6432Node(微星为目标x86和我测试它Win7的X64机器上)。

问题是:它只是不希望在所有写在Wow6432Node东西。 以下是代码:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="f671ee4d-dd0a-4f7f-a4d1-1d181d2f3002" Name="TestWow" Language="1033" Version="1.0.0.0" Manufacturer="X" UpgradeCode="5d030587-0b6f-4a55-b090-c97a4fd22d13">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" InstallPrivileges="limited"/>

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="XWix" Level="1">
      <ComponentRef Id="TestWow" />
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir" />
  </Fragment>

  <Fragment>
    <DirectoryRef Id="TARGETDIR">
      <Component Id="TestWow" Guid="f671ee4d-dd0a-4f7f-a4d1-1d181d2f3002">
        **<RegistryKey Root="HKCU" Key="Software\Classes\TestWow">
          <RegistryValue Name="Test" Value="Wow" Type="string" KeyPath="yes"/>
        </RegistryKey>**
      </Component>
    </DirectoryRef>
  </Fragment>
</Wix>

我甚至一直在努力,像修改注册表的一部分:

<RegistryKey Root="HKCU" Key="Software\Classes\Wow6432Node\TestWow">
  <RegistryValue Name="Test" Value="Wow" Type="string" KeyPath="yes"/>
</RegistryKey>

它仍然无法正常工作。

非常感谢您的帮助!

Answer 1:

我不认为HKCU以同样的方式HKLM虚拟化。 您需要确保您的组件被标记为32位之一,并为您带来任何虚拟化将得到照顾。



Answer 2:

您可以使用自定义操作此键。 点NET Framework 4.0中具有特殊的功能(RegistryView)从32个应用程序读取64位注册表。 请参阅此获取更多信息的文档。 你需要写另一个自定义操作,以删除卸载这个关键。

自定义操作:

[CustomAction]
    public static ActionResult CustomAction1(Session session)
    {
        RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
        key = key.OpenSubKey(@"Software\Classes\Wow6432Node", true);
        key.CreateSubKey("TestWow").SetValue("Test", "Wow", RegistryValueKind.String);

        return ActionResult.Success;
    }

维克斯:

<Binary Id="TestWow" SourceFile="CustomAction\TestProject\TestProject\bin\Release\TestProject.CA.dll" />
<CustomAction Id="TESTWOW" BinaryKey="TestWow" DllEntry="CustomAction1" Return="check" />

<Custom Action="TESTWOW" After="InstallInitialize" >Not Installed</Custom>


文章来源: Wix: Write register entries under HKCU\\Software\\Classes\\Wow6432Node
标签: wix wix3.7