【问题标题】:Wix error 1721 related to CustomAction与 CustomAction 相关的 Wix 错误 1721
【发布时间】:2012-08-07 11:04:41
【问题描述】:

我有关注 CostomAction

<Binary Id='ManualsBat' SourceFile='bin\Debug\test.bat' />

<CustomAction 
  Id="manuals"
  BinaryKey="ManualsBat"
  ExeCommand="[SourceDir]Manuals &quot;[Agent]Manuals&quot;"
  Execute="immediate"
  Return="check" />

test.bat 包含以下几行:

@echo off
echo Hello this a test batch file
pause
mkdir %2
copy %1 %2

它的主要目的是,当安装程序运行时,需要执行批处理文件。批处理文件必须创建一个新目录“[Agent]Manuals”,并且必须将所有文件从[SourceDir]Manuals 复制到[Agent]Manuals。

当我构建 .wxs 时,它不会在我运行 .msi 时给出任何错误,然后它会在日志文件中抱怨以下内容

错误 1721。此 Windows 安装程序包有问题。无法运行完成此安装所需的程序。请联系您的支持人员或软件包供应商。操作:手册,位置:C:\Windows\Installer\MSI1F50.tmp,命令:C:\dev\CD\Agent\pd\components\link\source\Link\Installer\WiX\WiX\bin\Debug\Manuals" D:\Cam\city\Agent\Manuals

有没有人遇到过这种错误。如果有人能帮我解决这个问题,那就太好了。

【问题讨论】:

  • 你发现了吗?我在安装自定义操作驱动程序时遇到了类似的问题。

标签: wix custom-action windowserror


【解决方案1】:

您的自定义操作很可能需要管理员权限。尝试将Execute 属性设置为deferred,将Impersonate 设置为no。请注意,这些选项要求在InstallFinalize 标准操作之后安排操作。

【讨论】:

  • 添加 After='InstallFinalize' 给我一个错误:“...是脚本内自定义操作。它必须在 InstallExecuteSequence 表中的 InstallInitialize 操作和 InstallFinalize 操作之间进行排序"
【解决方案2】:

引号可能有问题。更改 ExeCommand 引号。 试试这个:

<Binary Id='ManualsBat' SourceFile='bin\Debug\test.bat' />

<CustomAction 
  Id="manuals"
  BinaryKey="ManualsBat"
  ExeCommand='"[SourceDir]Manuals" "[Agent]Manuals"'
  Execute="deferred"
  Impersonate="no"
  Return="check" />

<InstallExecuteSequence>
  <Custom Action="manuals" Before="InstallFinalize">Not Installed</Custom>
</InstallExecuteSequence>

【讨论】:

    【解决方案3】:

    您通常需要调用 cmd /c foo.bat(或 Win9x 上的命令)来处理 .bat 文件。

    但是,我永远不会在我的安装程序中这样做。它违反了 Windows Installer 的整体设计。 MSI 是一种事务性的、声明性的编程语言。注入进程外的过程代码会大大增加失败的可能性(正如您所经历的那样),更糟糕的是会破坏 MSI 的事务优势。

    例如,如果您创建一个文件夹并复制一个文件,则在回滚期间不会撤消,在卸载期间也不会删除。相反,您应该使用内置的 Windows Installer 功能(CreateFolder 和 CopyFile 元素)来实现您的目标。

    在真正需要自定义操作的情况下(在您的示例中,您只是用较差的解决方案重新发明轮子)它们应该使用健壮的语言进行设计,并在尊重安全模型的同时保持声明性(数据驱动)和事务性设计MSI 使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多