【问题标题】:Install Shield 2009 Premier Custom Action issue in Vista Home/Premium/Ultimate在 Vista Home/Premium/Ultimate 中安装 Shield 2009 Premier Custom Action 问题
【发布时间】:2014-03-13 01:34:55
【问题描述】:

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

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

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

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

如何解决...?


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

【问题讨论】:

    标签: windows-installer action


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨迈克尔,谢谢 4 你的信息。是的,我是 InstallShield 的新手。我的自定义操作在执行序列中运行。它的属性是: 返回处理:同步(检查退出代码) 在脚本执行中:立即执行执行调度:始终执行安装 UI 序列: 安装执行序列: 安装执行条件:未安装且未PATCH 现在,如果在安装过程中将“脚本执行中”属性设置为“系统上下文中的延迟执行”,即使在 XP 和 Vista 中也会显示异常。现在该怎么办?
    • 啊,这是延迟操作的另一个限制:它们必须安排在 InstallInitialize 和 InstallFinalize 之间。如果您确实需要它作为第一个操作,您可能需要回退到 UI 序列方法(这在执行序列中是双重错误,因为执行序列不应该显示 UI)。
    • 非常感谢迈克尔。有用。我还为该自定义操作添加了清单文件,尽管没有它可以在 vista 中使用。
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多