【问题标题】:Is it possible to execute a custom action in WiX that is a managed .EXE file?是否可以在作为托管 .EXE 文件的 WiX 中执行自定义操作?
【发布时间】:2012-06-11 13:45:36
【问题描述】:

我正在尝试执行由 C# (.NET 3.5) 编写的自定义操作,该操作依赖于单个 DLL(也称为 C# 3.5)。我在安装中包含了 .EXE 和 .DLL,并验证了它们是否被复制到安装位置。但是,每次我尝试运行自定义操作时,都会收到以下错误:

操作开始时间 7:21:16:InstallFinalize。 错误 1721。此 Windows 安装程序包有问题。无法运行完成此安装所需的程序。请联系您的支持人员或软件包供应商。操作:UpgradeTo022,位置:C:\Program Files\Test\,命令:Upgrade-0.2.2.EXE MSI (s) (CC:38) [07:21:19:061]:产品:测试 -- 错误 1721。此 Windows 安装程序包有问题。无法运行完成此安装所需的程序。请联系您的支持人员或软件包供应商。操作:UpgradeTo022,位置:C:\Program Files\Test\,命令:Upgrade-0.2.2.EXE

自定义动作定义如下:

<CustomAction Id="UpgradeTo022"
Directory="INSTALLLOCATION"
Impersonate="no"
Execute="deferred"
ExeCommand='Upgrade-0.2.2.EXE'>

注意:自定义操作必须以提升的权限运行,因此具有延迟执行和 Impersonate="no" 属性。

具体安排如下:

<InstallExecuteSequence>
     <Custom Action="UpgradeTo022" Before="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>

文件安装如下:

<Component Id="CMP_UpgradeCommon" Guid="8ECF5076-732E-4010-A33B-BE362D818949" Win64="yes">
  <File Id="FILE_UpgradeCommonDLL"
   Source="..\Upgrade\UpgradeCommon\bin\Debug\UpgradeCommon.dll" Vital="yes"/>
</Component>

我看到一些关于运行托管 EXE 的暗示是自定义操作和 MSis 的问题,但没有真正的明确答案。

我也尝试过只运行一个非常简单的没有依赖关系的 .EXE 作为自定义操作,但没有运气。

对于创建安装程序包有点陌生,我很可能正在尝试做一些不受支持的事情,或者错过了一些简单的事情。

在此先感谢您提供任何解决此问题的建议。

JT.

【问题讨论】:

    标签: wix windows-installer custom-action


    【解决方案1】:

    不幸的是,这可能是很多事情。首先,您确定.net 3.5 安装在目标机器上吗?从那以后,你真的可以在目标机器上运行 exe 吗?

    另外需要注意的是,延迟操作在系统帐户的上下文中运行,因此如果 exe 出于任何原因需要访问配置文件,这将导致它失败。在尝试生成证书作为安装的一部分时,我遇到了这个问题。我为此挠了很久,最后不得不使用 -RunAs 开关生成 PowerShell,然后运行脚本来调用 exe。可能值得检查应用程序在系统帐户下是否运行良好(http://www.tech-recipes.com/rx/1288/how-to-run-applications-in-the-local-system-account- lsa/)

    【讨论】:

      猜你喜欢
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多