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