环境:安装Shield 2009 Premier,Vista(Home / Premium,Ultimate)
我在Install Shield 2009中有一个自定义操作,会在安装过程中触发。如果setup.exe运行正常,但在Vista中运行MyApplication.msi时(请注意在其他操作系统中自定义操作工作正常)它会显示运行自定义操作的异常。自定义操作只是使用命令行参数执行exe。
该exe在该OS中单独执行。但是当MyApplication.msi想要运行它时,它会显示异常。
我认为:MyApplication.msi无法为自定义操作(.exe文件)提供正确的权限(管理)。但是setup.exe可以。
如何解决......?
从我的自定义操作的自定义操作向导,对于“脚本内执行”值,我选择了“系统上下文中的延迟执行”
答案 0 :(得分:1)
您没有说明,但听起来您的setup.exe有一个需要管理员权限的清单(如果您在启动setup.exe时收到UAC提示,则情况就是这样)。您尝试从自定义操作运行的exe也可能具有类似的管理权限要求。 MSI中的exe自定义操作使用无法提升的CreateProcess。
如果您的操作在UI序列中运行,则需要以某种方式使用ShellExecute或ShellExecuteEx - 这可以使用带有标志LAAW_OPTION_USE_SHELLEXECUTE的LaunchApplication的InstallScript自定义操作,或使用直接调用ShellExecuteEx的C ++来完成。
如果您的操作在执行序列中运行,则应将其标记为“在系统上下文中延迟”,以便从提升的上下文启动它。这通常是首选(至少在用户体验方面),因为它避免了另一种方法将显示的额外UAC提示。但是,任何延迟操作都有一些限制(例如最小的属性访问),您可能需要熟悉它们。