0

环境:安装 Shield 2009 Premier、Vista(Home/Premium、Ultimate)

我在 Install Shield 2009 中有一个自定义操作,它会在安装过程中触发。如果 setup.exe 运行良好,但在 Vista 中运行 MyApplication.msi 时(请注意在其他操作系统中自定义操作工作正常),它会显示运行自定义操作的异常。自定义操作只是执行带有命令行参数的 exe。

该 exe 在该操作系统中单独执行得很好。但是当 MyApplication.msi 想要运行它时,它会显示一个异常。

我认为:MyApplication.msi 不能赋予该自定义操作(.exe 文件)适当的权限(管理)来运行。但是 setup.exe 可以。

怎么解决……?


从我的自定义操作的自定义操作向导中,对于“脚本内执行”值,我选择了“系统上下文中的延迟执行”

4

1 回答 1

1

您没有说明,但听起来您的 setup.exe 有一个需要管理权限的清单(如果您在启动 setup.exe 时收到 UAC 提示,就是这种情况)。听起来您尝试从自定义操作运行的 exe 也可能具有类似的管理权限要求。MSI 中的 exe 自定义操作使用无法提升的 CreateProcess。

如果您的操作在 UI 序列中运行,您需要以某种方式使用 ShellExecute 或 ShellExecuteEx - 这可以通过使用带有标志 LAAW_OPTION_USE_SHELLEXECUTE 的 LaunchApplication 的 InstallScript 自定义操作或直接调用 ShellExecuteEx 的 C++ 来完成。

如果您的操作在执行序列中运行,则应将其标记为“在系统上下文中延迟”,以便从提升的上下文开始启动它。这通常是首选(至少在用户体验方面),因为它避免了其他方法将显示的额外 UAC 提示。但是,任何延迟操作都有限制(例如最小的属性访问),您可能需要熟悉。

于 2009-05-18T14:24:06.477 回答