WIX - 在注册表中写入属性

Posted

技术标签:

【中文标题】WIX - 在注册表中写入属性【英文标题】:WIX - Write Property in Registry 【发布时间】:2013-10-23 08:25:07 【问题描述】:

我正在尝试将通过 burn 正确传递的属性写入我的 MSI 中的注册表

这里有来自引导程序的代码

<Variable Name="REFERAL" Type="string" bal:Overridable="yes" Persisted="yes" Value="REFERAL__123456" />
.
.
.
<MsiProperty Name="REFERAL" Value="[REFERAL]" />

这是来自微星的代码

  <Fragment>
    <DirectoryRef Id="INSTALLFOLDER">
      <Component Id="Main" Guid="138feeae-f687-4973-8d94-2bfaa2ddec38">
        <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Name='REFERER' Type='string' Value='[REFERER]' />
.
.
.
      </Component>
    </DirectoryRef>
  </Fragment>

日志报告属性 REFERER 已正确更改

引导烧录

[25E4:2464][2013-10-23T10:18:04]i323: Registering package dependency provider: A7E4C8A8-DC93-431F-A48C-8DAB6D766C5A, version: 1.0.0.16052, package: app.msi
[25E4:2464][2013-10-23T10:18:04]i301: Applying execute package: app.msi, action: Install, path: C:\Users\Daniele\AppData\Local\Package Cache\A7E4C8A8-DC93-431F-A48C-8DAB6D766C5Av1.0.0.16052\app.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7" REFERAL="REFERAL__123456"'
[25E4:2464][2013-10-23T10:18:07]i319: Applied execute package: app.msi, result: 0x0, restart: None

微星

MSI (s) (9C:64) [10:18:05:690]: Command Line: ARPSYSTEMCOMPONENT=1 MSIFASTINSTALL=7 REFERAL=REFERAL__123456 REBOOT=ReallySuppress CURRENTDIRECTORY=C:\Users\Daniele\Sviluppo\c#\app\installer-bootstrap\bin\x86\ReleaseForPublish CLIENTUILEVEL=3 MSICLIENTUSESEXTERNALUI=1 CLIENTPROCESSID=9700 
.
.
.
MSI (s) (9C:64) [10:18:05:692]: PROPERTY CHANGE: Modifying REFERAL property. Its current value is 'none'. Its new value: 'REFERAL__123456'.
.
. here it doesn't write the value
.
MSI (s) (9C:64) [10:18:06:800]: Executing op: RegAddValue(Name=REFERER,,)

【问题讨论】:

看起来在 Burn 中您使用的是名称“REFERAL”,而在您的 msi 中您使用的是名称“REFERER”。 【参考方案1】:

您希望值为“REFERAL__123456”。您的MsiProperty 元素将此值分配给名为REFERAL 的MSI 属性,但在您的RegistryValue 元素中您使用值REFERER。将其更改为 REFERAL 就可以了。您还应该指定 Action 属性,以明确您正在使用此元素做什么:

<Fragment>
<DirectoryRef Id="INSTALLFOLDER">
  <Component Id="Main" Guid="138feeae-f687-4973-8d94-2bfaa2ddec38">
    <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Action='write' Name='REFERER' Type='string' Value='[REFERAL]' />
.
.
.
  </Component>
</DirectoryRef>

【讨论】:

以上是关于WIX - 在注册表中写入属性的主要内容,如果未能解决你的问题,请参考以下文章

(WiX) 将产品信息写入注册表以用于双重用途安装程序

Wix v3.7 - 写入注册表值时出错

WiX安装选项--环境变量

如何使用 wix 在卸载时编写注册表项

Wix 工具集 - 使用 RegistrySearch 在 DoAction 或属性控制事件上设置属性

WiX:有条件地注册应用程序以在 Windows 启动时启动