将WiX安装程序配置为根据环境使用不同的用户凭据

时间:2019-02-04 21:22:16

标签: .net wix environment-variables credentials

我研究了所有网络,以寻找有关如何实现这一目标的线索,但是没有运气。我在Visual Studio 2013中有一个WiX安装程序项目,该项目安装Windows服务(它不包含UI,仅包含控制台),并且由于它正在安装服务,因此必须指定用户,并且该用户的权限将生效。问题在于该用户在我的.WXS文件上进行了硬编码,并且可以在我的DEV和QA堆栈上使用,但是该用户在prod上不存在,因此安装程序无法正常工作。

我想确定WXS文件是否可以使用配置文件的方式定义特定于环境的登录名,或者是否存在类似的内容。

我不想为每个环境设置3个安装项目。

为简单起见,这里是当前的WXS代码:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="Some ID" 
           Name="TestService" 
           Language="1033" 
           Version="1.0.0" 
           Manufacturer="TestManufacturer" 
           UpgradeCode="Some Upgrade Code">

    <Package Compressed="yes"/>

    <Media Id="1" Cabinet="test.cab" EmbedCab="yes"/>

    <Property Id="LOGIN">HARD-CODED USER</Property>
    <Property Id="PASSWORD">HARD-CODED PASSWORD</Property>

    <Directory Name="SourceDir" Id="TARGETDIR">
      <Directory Name="ProgramFilesFolder" Id="ProgramFilesFolder">
        <Directory Name="TestDir" Id="_1">
          <Directory Name="Service.ServiceSub" Id="_2">
            <Component Id="_1" Guid="Some Guid">
              <File Source="$(var.Service.ServiceSub.TargetPath)" />

          <ServiceInstall 
            Id="TestServicee" 
            Name="TestService" 
            DisplayName="Test" 
            Type="ownProcess" 
            Start="auto" 
            ErrorControl="normal" 
            Description="This is a test" 
            Account="[LOGIN]" 
            Password="[PASSWORD]" />
          <ServiceControl Id="StopTestService" Name="TestService" Stop="both" Wait="yes" Remove="uninstall" />
        </Component>
      </Directory>
    </Directory>
  </Directory>
</Directory>

<Feature Id="_1" Level="1">
  <ComponentRef Id="_1"/>
</Feature>

</Product>

请告诉我,如果不清楚,我可以扩展信息。感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您是否尝试过在安装程序流程中构造一些UI屏幕以接受用户名/密码输入,以便随后可以将这些值分配给属性并在示例中使用它?

答案 1 :(得分:0)

感谢您的评论,我刚刚创建了3个.bat文件,并使用msiexec将该凭据作为参数传递来安装服务,如下所示:

msiexec /i SampleServiceSetup.msi LOGIN="sampleUsername" PASSWORD="SamplePassword*"

当我需要其他凭据时,只需在cmd中要求它们即可:)