2

我正在尝试使用 wix 3.8 进行安装程序。我可以使用自定义属性来存储我自己的输入,但我想使用以前安装的 msi 上的输入值。有没有办法完成这样的事情?

4

3 回答 3

2

一般来说,没有。Windows 安装程序包不需要记录它从用户那里获得的输入。有些确实在注册表中记录了一些信息,您可能会选择依赖在那里找到它。

作为替代方案,您可能会发现其他安装程序可以在没有 UI 的情况下运行,并且可以通过传入的属性进行充分控制。如果是这样,您可以编写自己的 UI(一种方法是自定义 WiX Bootrapper 应用程序[示例])在运行安装程序之前收集输入。

于 2013-12-19T01:46:20.707 回答
2

为了让您朝着正确的方向前进,请在您的第一个 MSI 中添加这个(当然首先要适应您的需要):

<DirectoryRef Id="INSTALLDIR">
  <Component Id="RegistryEntries" Guid="{0AC76129-F8E2-47D3-B9FD-09B1E10A8541}">
    <RegistryKey Root="HKLM" Key="Software\Company123\App123" Action="create">
      <RegistryValue Type="integer" Name="SomeIntegerValue" Value="1" KeyPath="yes"/>
      <RegistryValue Type="string" Name="UserInput" Value="[USERINPUT]" />
    </RegistryKey>
  </Component>
</DirectoryRef>

不要忘记在<Feature> <ComponentRef Id="RegistryEntries" /> 安装时引用组件为属性分配值,[USERINPUT]例如msiexec /i your.msi /qb+ USERINPUT="the value to be saved in registry"

然后在第二个 MSI 中添加如下内容:

   <Property Id="READREGISTRY">
       <RegistrySearch Id="USERINPUT_Value" Root="HKLM" Key="Software\Company123\App123" Name="UserInput" Type="raw" />
   </Property>

您在安装期间输入的值/字符串USERINPUT=将存储在属性中的第二个 MSI 中READREGISTRY

这是我的第二个 msi 中的一段日志:

PROPERTY CHANGE: Adding READREGISTRY property. Its value is 'testing registry wef wef wef w'.

根据您的安装,它可能是 Per User 或 Per Machine,您可以将 Root 调整为 HKCU 以进行 PerUser 安装,或者将其留给 HKLM 以进行 PerMachine。

有关更多信息,请参阅 Wix 文档,提示:“如何:在安装期间编写注册表项”和“如何:在安装期间读取注册表项”。

于 2013-12-19T10:48:30.063 回答
0

在首先安装的 MSI 中创建自定义操作,然后将所需的值/用户条目写入文件或注册表。在您的最终 MSI 中,从注册表/文件中读取值并使用它。

这是一个如何从用户读取值并更新您的 app.config 的示例,这不是苹果到苹果的场景,但这将引导您完成它。

http://bensnose.blogspot.com/2013/03/more-custom-actions-with-wix.html

免责声明:我没有尝试过这篇博文中提到的内容,但我做了非常相似的事情,发现它有很好的解释,这就是我发布链接的原因。

于 2013-12-18T16:37:14.173 回答