我需要在安装过程中启动.cmd脚本,并且此脚本会修改安装目录中的某些文件。我有以下WiX代码:
<Fragment>
<Property Id="WINCMD">cmd.exe</Property>
<CustomAction Id="ResignManifest"
Property="WINCMD" ExeCommand="/C [ToolDir]manifest_resign.cmd"
Execute="deferred" Impersonate="no" Return="check"/>
<InstallExecuteSequence>
<Custom Action="ResignManifest" After="InstallFinalize"/>
</InstallExecuteSequence>
</Fragment>
问题在于,在安装期间,由于访问权限不足,脚本无法进行修改。我的CA指定MSI不应模拟用户上下文(我以Admin权限启动安装程序),但cmd.exe在没有Admin权限的情况下运行。
PS。我知道这不是在安装过程中另外启动bat / cmd文件的好习惯,但是我必须这样做以辞职某些Silverlight应用程序的应用程序和部署清单(在安装过程中,用户会修改应用程序配置文件,因此此类文件的哈希值内部清单变得无效)。
在回答历史记录中的某个地方,我之前已经解决过这一问题。诀窍是通过重构Silverlight代码以从未签名的settings.xml文件读取来简化问题。这就是几年前我让开发人员为我们编写的内部应用程序所做的事情。服务器端具有一个可从settings.xml文件读取的设置Web服务。调用Web服务以检索其设置的Silverlight应用程序。这样就无需执行自定义操作。
请参阅:如何在InstallShield Basic MSI项目中的ZIP文件中更改文本文件
为Silverlight创建和使用Silverlight web.config应用程序设置(Web.config配置应用程序设置)或app.config应用程序设置配置文件
我同意你已经知道的。调用批处理文件并辞退MSI放置的文件不是一个好的设计。是的,您应该已经在系统上下文中执行了。您确定CMD.exe没有运行提升吗?我不知道您怎么确定,因为MSI没有记录它。我建议至少使用QuietExecCA模式来获取cmd脚本的结果记录在MSI日志中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句