WIX安装程序使用用户文本来指定产品名称/命令行参数

时间:2016-12-08 17:49:12

标签: dynamic service wix installer

我正在努力与WIX和价值观建议。我正在创建一个框架窗口服务,并让安装程序中的代码正确捆绑文件并部署Windows服务,传递命令行参数等。

但是,该服务在代码中没有部署操作逻辑 - 它在运行时从存储配置信息的WS中拉出。我需要告诉windows服务(在安装时)使用哪个配置名称。

我还需要安装该服务,因此它与配置名称的所有其他服务不同。一个盒子可以安装这个东西的n个实例;每个服务从不同的配置中拉出来。

简而言之:我需要根据用户的输入动态设置属性(和产品名称)。

这是我尝试过的,不知道如何继续获取“配置”功能。用户设置的值:

<!--    //todo: define this by user input??-->
<?define Config = "DefaultConfigName" ?>

<Product Id="*" Name="$(var.Config)" Language="1033" Version="1.0.0.0" UpgradeCode="{someGUID}">
  <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

 <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />

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

 <Feature Id="ProductFeature" Title="$(var.Config)" Level="1">
  <ComponentGroupRef Id="ProductComponents" />
 </Feature>
</Product>

思想?

1 个答案:

答案 0 :(得分:1)

首先,请记住<?define ... ?>事物会创建一个编译时变量。即,该值将被编译到您的.msi中,在安装时不会更改。

其次,我很确定更改已经构建的.msi的产品名称的唯一方法是使用转换。

以上两点意味着您需要在创建安装程序时了解Config的每个可能值,并创建多个.msis或创建一个.msi和多个.mst转换。

我怀疑这不是你想要的。而是考虑定义公共安全属性。此属性可以在命令行上传递给.msi,也可以从引导程序或MSI UI设置。然后,您可以使用常规[CONFIG]语法在ServiceInstall元素属性中使用该属性。这种方法的好处是,您无需在构建时了解Config的所有可能值。