gpt4 book ai didi

iis - 在使用 WiX 安装网站之前停止 AppPool

转载 作者:行者123 更新时间:2023-12-01 22:31:39 42 4
gpt4 key购买 nike

我正在尝试采用安装网站的现有 MSI 并将其添加到停止 AppPool 的过程中,以便在安装更新时您不必记住在运行安装程序之前停止 AppPool。

下面列出了我设置的自定义操作

<CustomAction Id='StopIisAppPoolCMD'
Property='StopIisAppPool'
Value='"[WindowsFolder]SysNative\inetsrv\appcmd.exe" stop apppool /apppool.name:"[WEB_APP_POOL_NAME]"'
Execute='immediate' />
<CustomAction Id='StopIisAppPool'
BinaryKey='WixCA'
DllEntry='CAQuietExec64'
Execute='immediate'
Return='check' />

它们在 msi 产品中的安排如下:

<InstallExecuteSequence>
...
<Custom Action="StopIisAppPool" Before="InstallValidate"></Custom>
<Custom Action="StopIisAppPoolCMD" Before="StopIisAppPool"></Custom>
...
</InstallExecuteSequence>

msi 被包裹在一个像这样的包中:

<Chain>
...
<MsiPackage Name="MySetup.msi" DisplayInternalUI="yes"/>
</Chain>

执行自定义操作时,我会在 msi 日志中看到此信息

MSI (s) (94:A8) [14:43:48:833]: Doing action: StopIisAppPoolCMD

Action 14:43:48: StopIisAppPoolCMD.

Action start 14:43:48: StopIisAppPoolCMD.

MSI (s) (94:A8) [14:43:48:834]: PROPERTY CHANGE: Adding StopIisAppPool property. Its value is '"C:\WINDOWS\SysNative\inetsrv\appcmd.exe" stop apppool /apppool.name:"MyWebAppPool"'.

Action ended 14:43:48: StopIisAppPoolCMD. Return value 1.

MSI (s) (94:A8) [14:43:48:834]: Doing action: StopIisAppPool

Action 14:43:48: StopIisAppPool.

Action start 14:43:48: StopIisAppPool.

MSI (s) (94:2C) [14:43:48:837]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSI2B0E.tmp, Entrypoint: CAQuietExec64

CAQuietExec64: Error 0x80070057: failed to get command line data

CAQuietExec64: Error 0x80070057: failed to get Command Line

CustomAction StopIisAppPool returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)

Action ended 14:43:48: StopIisAppPool. Return value 3.

Action ended 14:43:48: INSTALL. Return value 3.

我觉得我的问题可能是因为我尝试执行 Execute='immediate' 而不是 deferred,但如果我将自定义操作运行为 deferred,那么它必须在 InstallInitialize 之后运行,这已经来不及停止 AppPool 以避免文件使用冲突。

我认为可以立即运行,因为msi被包装在WiX bundle 中,所以我假设它会在InstallInitialize之前以提升的权限运行因为我必须在 msi 安装程序启动之前输入管理员密码。

我考虑过将这些操作放在 bundle 中的单独 msi 或 exe 包中,并在安装 Web 文件的 msi 之前运行它,但我真的不想这样做,因为 Web 应用程序池名称是从 UI 中检索的msi 已经存在,如果我可以避免它,我宁愿不必重做 UI 的处理方式。

有没有更简单的方法来解决这个问题?我错过了一些简单的事情吗?或者我真的需要重做 UI 并将这些操作拆分到 bundle 内的单独 exe 包或 msi 中吗?如果是这种情况,我可能会说忘记它,并确保每个人都知道在安装任何新版本之前手动停止应用程序池。

最佳答案

我在安装之前从未需要停止应用程序池。 ASP.NET 用完临时目录并且不存在任何文件锁定问题。此外,当 web.config 被触及时,IIS 会自动回收应用程序池,因此所有这些都应该不是问题。

关于iis - 在使用 WiX 安装网站之前停止 AppPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41578682/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com