【问题标题】:InstallShield Professional Edition - Custom Action - Setup.exe vs MSIInstallShield 专业版 - 自定义操作 - Setup.exe 与 MSI
【发布时间】:2013-12-20 08:21:58
【问题描述】:

我有一个 Windows 窗体应用程序(Add-In Express 解决方案),为此我创建了一个使用自定义操作(由 Add-In Express 自动生成)的 InstallShield 安装项目。自定义操作正在启动可执行文件(可执行文件用于注册插件)。

当我为项目生成 setup.exe 文件时,一切正常。自定义操作正在运行并且加载项正在正确安装。

当我生成一个 msi 文件(在 Installshield 的发布向导中取消选中“创建安装启动器”选项)时,自定义操作未运行(未安装插件,但程序显示在控制面板)当我尝试安装产品时。

在使用自定义操作时我是否需要使用 setup.exe 版本,或者在尝试生成 msi 文件时我没有正确配置我的项目?

【问题讨论】:

  • 使用“/L C:\LOG.txt”运行 MSI。在日志文件中,您可以找到您的 CustomAction“跳过操作:...”以及未执行操作的原因。 (例如,Setup.exe 将参数传递给 msi:/v"RUNCA=true"。如果没有 Setup.exe,"RUNCA" 为 false)
  • 感谢马克的帮助。日志显示自定义操作正在运行。我注意到,当我在管理员模式下通过命令提示符运行 MSI 时,它工作正常。如果我在没有管理员权限的情况下通过命令提示符运行 MSI,它会询问我的权限,但不会安装插件并且日志显示没有错误。我想我应该能够使用它。

标签: windows-installer installshield setup.exe


【解决方案1】:

直接运行 MSI 或使用 Setup.exe 的区别在于提升用户权限的顺序。

如果您运行 Exe,您可能会收到一个请求更多权限的 UAC 弹出窗口,您单击“确定”,一切都会运行提升(具有管理员权限)。

如果您从已经提升的命令提示符运行它,那么所有内容都将运行提升。

如果您正常运行 msi(例如双击它),它将运行整个 installUIsequence 然后它将运行 installexecute 序列并且当它到达 InstallInitialize 操作时它将请求提升的权限。

一旦运行 InstallFinalize 操作,权限就会被删除。

所以您需要在 InstallInitialize 之后和 InstallFinalize 操作之前放置需要管理员权限的自定义操作

【讨论】:

    【解决方案2】:

    我最终解决问题的方法是将自定义操作设置为在系统上下文中运行。

    In-Script Execution: Deferred Execution in System Context
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多