1

我正在尝试执行一个由 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 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 的暗示是自定义操作和 MSis 的问题,但没有真正明确的答案。

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

作为创建安装程序包的新手,我很可能要么尝试做一些不受支持的事情,要么错过一些简单的事情。

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

JT。

4

1 回答 1

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/)

于 2012-06-08T13:27:28.060 回答