使用提升的权限自定义操作以运行批处理文件



我需要在安装过程中启动。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权限。

p 。我知道在安装期间额外启动bat/cmd文件不是很好的做法,但我必须这样做才能为一些Silverlight应用程序辞职应用程序和部署清单(在安装期间用户修改应用程序配置文件,因此清单内此类文件的哈希值无效)。

在我的回答历史的某个地方,我以前解决过这个问题。这里的技巧是通过重构Silverlight代码来从未签名的settings.xml文件中读取数据,从而简化问题。这是几年前我让开发人员为我们编写的内部应用所做的事情。服务器端有一个从settings.xml文件中读取的设置web服务。调用webservice来检索其设置的Silverlight应用。这消除了自定义操作的需要。

参见:如何在InstallShield Basic MSI项目中更改ZIP文件中的文本文件

创建和使用Silverlight web。配置应用设置(Web

配置文件 我同意你已经知道的。调用批处理文件和退出由MSI设置的文件不是一个好的设计。您是对的,您应该已经在系统上下文中执行了。您确定CMD.exe没有高架运行吗?我不知道你怎么能确定,因为它没有被MSI记录。我建议至少使用QuietExecCA模式来获取MSI日志中记录的cmd脚本的结果。

最新更新