我正在努力与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>
思想?
答案 0 :(得分:1)
首先,请记住<?define ... ?>
事物会创建一个编译时变量。即,该值将被编译到您的.msi中,在安装时不会更改。
其次,我很确定更改已经构建的.msi的产品名称的唯一方法是使用转换。
以上两点意味着您需要在创建安装程序时了解Config
的每个可能值,并创建多个.msis或创建一个.msi和多个.mst转换。
我怀疑这不是你想要的。而是考虑定义公共安全属性。此属性可以在命令行上传递给.msi,也可以从引导程序或MSI UI设置。然后,您可以使用常规[CONFIG]
语法在ServiceInstall元素属性中使用该属性。这种方法的好处是,您无需在构建时了解Config的所有可能值。