Wix - 如何从以前安装的msi获取用户输入?

时间:2013-12-18 02:58:35

标签: wix windows-installer wix3.8

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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=将存储在属性READREGISTRY

中的第二个MSI中

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

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

根据您的安装位置,可能是每用户或每台计算机,您可以根据PerUser安装将Root调整为HKCU,或将其留给HKMM for PerMachine。

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

答案 2 :(得分:0)

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

以下是如何从用户读取值并更新app.config的示例,这不是苹果到Apple的方案,但这将指导您完成它。

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

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