我有一个命令行我想在安装合并模块(通过创建的运行维克斯 )与下面的代码。
<CustomAction
Id='SetWebsiteProtocols'
Execute='commit'
Return='ignore'
Impersonate="yes"
FileKey='Web.config'
ExeCommand='c:\windows\system32\inetsrv\appcmd.exe set app "Default Web Site/My Website" /enabledProtocols:http,net.tcp,net.pipe' />
<InstallExecuteSequence>
<Custom Action="SetWebsiteProtocols" After="InstallFiles"/>
</InstallExecuteSequence>
当我在命令行(目前硬编码)上运行命令它工作正常。 但是,如果在安装期间运行,它失败。 打开日志显示错误代码1721,但谷歌搜索不返回任何内容的兴趣。
如何解决这个问题?
我看到你的代码中的许多问题。
您定于提交如果回滚被策略禁用,将不会被处理。
你是冒充UAC可以在UAC失效/升高的情况下,如果你的消费MSI不是由自举setup.exe
是抬高UI /执行过程。
你已硬编码到一个路径system32
其或者可能不存在,因为Windows没有被称为Windows或可能取决于OS平台上的32位或64位的系统文件夹中的文件夹。
您忽略返回代码,所以如果失败会安装继续下去。 插头和祈祷的人?
你将有一个大丑闪烁的黑色控制台窗口,在安装过程中,只是尖叫“哦,这家伙不知道他在做什么。”
您将获得绝对没有注销EXE的。
你可能不知道的,可以直接调用发生的EXE自定义操作的问题。
下面是一些阅读,以帮助您了解这些问题:
现在我还要提到的是你可能重新发明轮子,但似乎维克斯内置的IIS自定义操作不公开,你需要的变化点。 这是一个耻辱。 所以我建议在看下面的功能来修复您的EXE调用:
我觉得这是呼唤你的EXE无闪烁的一个非常优雅的方式DOS中,适当的日志到您的MSI日志和许多微软的EXE关注修复。 从那里,你只需要解决它,所以你正确地解决了正确的32位或64位APPCMD。 我只安装目标服务器2008 R2是一个64位的唯一平台,所以我的代码如下所示:
(此代码增强了东西的InstallShield不公开......)
<CustomAction Id="SetIISAuthCAD"
Property="SetIISAuth"
Value=""[System64Folder]inetsrv\appcmd.exe" set config "Default Web Site/MyApplication" /section:system.webServer/security/authentication/windowsAuthentication /useAppPoolCredentials:true /commit:MACHINE/WEBROOT/APPHOST " />
<CustomAction Id="SetIISAuth"
BinaryKey="WixCA"
DllEntry="CAQuietExec64"
Execute="deferred"
Return="ignore"
Impersonate="no" />
<InstallExecuteSequence>
<Custom Action="SetIISAuth"
Before="InstallFinalize">Not Installed</Custom>
<Custom Action="SetIISAuthCAD"
Before="SetIISAuth">Not Installed</Custom>
</InstallExecuteSequence>