是否可以在WiX中执行自定义操作,该操作是托管的.EXE文件?

时间:2012-06-07 13:34:56

标签: wix windows-installer custom-action

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

动作开始7:21:16:InstallFinalize。 错误1721.此Windows Installer程序包存在问题。无法运行此安装所需的程序。请联系您的支持人员或包装供应商。操作:UpgradeTo022,位置:C:\ Program Files \ Test \,命令:Upgrade-0.2.2.EXE MSI(s)(CC:38)[07:21:19:061]:产品:测试 - 错误1721.此Windows Installer程序包存在问题。无法运行此安装所需的程序。请联系您的支持人员或包装供应商。操作: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的暗示是自定义操作和MS的问题,但没有真正明确的答案。

我还试过运行一个非常简单的.EXE,没有依赖关系作为自定义操作,并且在那里没有运气。

对于创建安装程序包有点新,我很可能要么尝试做一些不受支持的事情,要么缺少简单的东西。

提前感谢任何有关解决这个问题的建议。

JT。

1 个答案:

答案 0 :(得分:0)

不幸的是,这可能是一些事情。首先,你确定目标盒上安装了.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 /)