2

作为我正在使用的引导程序系统的一部分,我正在使用 WiX 创建一个 MSI,该 MSI 以以下方式调用:

msiexec /i product.msi WEBSITENAME="Default Web Site" PORT="80"

WEBSITENAME 和 PORT 参数表示网站的名称和端口,它是作为我正在使用的引导程序系统的早期部分创建的。在我的 *.wxs 文件中,我希望能够使用这些传入的参数来获得对网站的“引用”,以便我可以在同一个网站下创建其他 Web 应用程序、虚拟目录等。

我已经能够通过“硬编码”现有的网站名称和端口来做到这一点,即

<!-- Reference existing Default Web Site at port 80 -->
<iis:WebSite Id="DefaultWebSite" Description="Default Web Site">
    <iis:WebAddress Id="MySiteWebAddress" Port="80"/>
</iis:WebSite>

<!-- Reference existng Default Application Pool -->
<iis:WebAppPool Id="DefaultApplicationPool" Name="DefaultAppPool">
</iis:WebAppPool>

然后使用这些硬编码值在下面创建虚拟目录

<iis:WebVirtualDir Id="MyVirtualDir" Alias="Images" Directory="ImagesDirectory" WebSite="DefaultWebSite">
    <iis:WebApplication Id="MyWebSiteApplication" Name="ImagesWebSite" WebAppPool="DefaultApplicationPool"/>
</iis:WebVirtualDir>

我现在想做的是用传入命令行的值替换硬编码的“默认网站”。

这可能吗?如果有怎么办?我已经阅读了一些关于使用属性的信息,但我不知道如何用属性替换硬编码字符串。任何帮助将非常感激。

谢谢!

4

1 回答 1

4

You have to enclose the name of the property in square brackets to force WiX to resolve it as a property. For example:

<iis:WebAppPool Id="WebAppPool" Name="[WEB_APP_POOL_NAME]" Identity="other" User="WebAppPoolUser" ManagedRuntimeVersion="v4.0" ManagedPipelineMode="Integrated"/>

<iis:WebSite Id="DefaultWebSite" Description="[WEBSITE_NAME]" Directory="INSTALLLOCATION" AutoStart="yes" StartOnInstall="yes">
  <iis:WebAddress Id="AllUnassigned" Port="[WEBSITE_PORT]" Header="[WEBSITE_HEADER]"/>
  <iis:WebApplication Id="Application" Name="App" WebAppPool="WebAppPool" />
</iis:WebSite>

The 'Directory' attribute does not need brackets because it's already going to be resolved automatically, as explained in the documentation.

于 2013-10-14T07:38:32.717 回答