我需要在安装期间启动.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 rigths启动安装程序),但cmd.exe在没有管理员权限的情况下运行。
PS 即可。我知道在安装过程中另外启动bat / cmd文件并不是一个好习惯,但是我必须这样做才能重新启动某些Silverlight应用程序的应用程序和部署清单(在安装用户修改应用程序配置文件期间,所以这样的文件的哈希值)内部清单变得无效)。
答案 0 :(得分:1)
在我回答历史的某个地方,我之前已经解决了这个问题。诀窍是通过重构Silverlight代码来读取未签名的settings.xml文件来简化问题。这是我几年前开发人员为我们编写的内部应用程序所做的事情。服务器端有一个设置webservice,它从settings.xml文件中读取。调用Web服务以检索其设置的Silverlight应用程序。这消除了对自定义操作的需要。
请参阅:How to do Text file changes in a ZIP file in InstallShield Basic MSI project
我同意你已经知道的事情。调用批处理文件并重新签名由MSI制定的文件并不是一个好的设计。你是对的,你应该已经在系统环境中执行了。你确定CMD.exe没有运行升级吗?我不知道你怎么能确定它,因为它没有被MSI记录。我建议至少使用QuietExecCA模式来获取MSI日志中记录的cmd脚本的结果。