【问题标题】:WiX remove default IIS website before creating a new oneWiX 在创建新网站之前删除默认 IIS 网站
【发布时间】:2014-03-26 10:09:51
【问题描述】:

我为我的网站创建了一个 WiX 包,它工作正常,只是我新创建的网站在安装后无法启动。那是因为我的网站已注册使用 *:80。默认情况下,IIS 有一个具有相同绑定的网站设置。

有没有办法在创建我的新网站绑定之前删除默认网站(或至少停止它)?我似乎无法在互联网上找到任何相关信息,但这似乎是一个常见问题。

【问题讨论】:

  • 你找到答案了吗?
  • 老实说,我不记得了。我确定我找到了一些解决方法,因为安装的部署工作正常,但那是很久以前的事了,我不记得是什么了。
  • 感谢您的回复,我也找到了解决方法,并在下面发布了答案

标签: iis wix wix3.7


【解决方案1】:

您正在尝试做的事情在软件安装领域被认为是一种非常糟糕的品味。安装程序绝不能弄乱目标系统。很可能有一些网站正在运行,在您的安装程序完成后将变得无响应。

您应该始终假设在您的安装程序启动之前,目标系统处于某种已知的稳定状态。不管你的安装结果如何,你应该让系统处于稳定的已知状态。这就是为什么有一个回滚操作的概念,它负责回滚操作,以防我们需要回滚整个安装事务。

我建议您针对该 IIS 行为修改您的安装程序。例如,始终创建一个具有唯一名称的新 IIS 网站。您甚至可以为其创建一个单独的应用程序池,以使其真正隔离。然后卸载软件会容易得多 - 您只需让 Windows Installer 完成卸载已安装的工作即可。

【讨论】:

  • 这是用于一键式部署我正在处理的网站的内部安装,因此我可以处理现有和正在运行的网站(我实际上希望将它们全部删除)。单独的应用程序池和唯一名称将不起作用,因为如果不使用主机标头,两个网站无法同时在同一端口和同一 IP 地址上运行。
【解决方案2】:

我找到了如何做到这一点,我想我会为任何疲惫的旅行者提供一个答案:

<CustomAction Id="RegisterCommand"
              Property="RegisterPowerShellProperty"
                                Execute="immediate"
                                Value="&quot;C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe&quot; -ExecutionPolicy ByPass -NoLog -InputFormat None -NoProfile -command &quot;Remove-IISSite -Name 'Default Web Site' -Confirm:$false&quot;"/>
<CustomAction Id="RegisterPowerShellProperty"
              BinaryKey="WixCA"
              DllEntry="CAQuietExec64"
              Execute="deferred"
              Return="check"
              Impersonate="no" />

<InstallExecuteSequence>
        <Custom Action="RegisterCommand" After="CostFinalize">NOT Installed</Custom>
       <Custom Action="RegisterPowerShellProperty" After="InstallFiles">NOT  Installed</Custom>     
</InstallExecuteSequence>

我的回答基于这篇文章:here

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多