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

时间:2015-08-31 08:56:37

标签: wix windows-installer

我需要在安装期间启动.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应用程序的应用程序和部署清单(在安装用户修改应用程序配置文件期间,所以这样的文件的哈希值)内部清单变得无效)。

1 个答案:

答案 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

Creating and Using Silverlight web.config app settings (Web.config Configuration Applicatioin Settings) or app.config application settings configuration file for Silverlight

我同意你已经知道的事情。调用批处理文件并重新签名由MSI制定的文件并不是一个好的设计。你是对的,你应该已经在系统环境中执行了。你确定CMD.exe没有运行升级吗?我不知道你怎么能确定它,因为它没有被MSI记录。我建议至少使用QuietExecCA模式来获取MSI日志中记录的cmd脚本的结果。