2

私の最新プロジェクトの WiX インストーラーを作成しようとしています。管理者として cmd プロンプトを介して msi を実行すると正常に動作し、カスタム アクションは大騒ぎせずに開始され、すべて正常に動作するという奇妙な問題がありますが、msi をダブルクリックするとカスタム アクションが動作せず、インストーラーが失敗します。Visual Studio 2012 と Windows 7 を使用しています。

<!--Custom Actions-->
<Binary Id='customShortcut' SourceFile='$(var.CustomDir)\TestInstallerCustom.CA.dll'/>
<Binary Id='customDir' SourceFile='$(var.CustomDir)\TestInstallerCustom.CA.dll'/>
<Binary Id='removeDir' SourceFile='$(var.CustomDir)\TestInstallerCustom.CA.dll'/>

<CustomAction Id='customShortcutId' BinaryKey='customShortcut' DllEntry='CustomShortcut'
              Execute='immediate' Impersonate='no' Return='check' />
<CustomAction Id='customDirId' BinaryKey='customDir' DllEntry='CustomDir'
              Execute='immediate' Impersonate='no' Return='check'/>
<CustomAction Id='removeDirId' BinaryKey='removeDir' DllEntry='RemoveDir'
              Execute='immediate' Impersonate='no' Return='check'/>

<InstallExecuteSequence>
  <Custom Action='customDirId' Before='InstallFinalize'/>
  <Custom Action='customShortcutId' After='InstallFinalize'/>
  <Custom Action="removeDirId" After="InstallValidate">REMOVE="ALL"</Custom>
</InstallExecuteSequence>
4

1 に答える 1

3

'immediate'カスタム アクションは、インストールの昇格された部分では実行されません。したがって、それらはインストールプロセスでのみ昇格され、昇格されて実行されます(ご覧のとおり)。カスタム アクションを昇格させるには、それらをトランザクション スクリプトの一部にする必要があります。これを行うには、CustomAction要素Execute='deferred'属性を設定します。

注: 遅延カスタム アクションには、MSI SDKの「遅延実行カスタム アクション」トピックに記載されている他の制限があります。カスタム アクションがマシンの状態を変更しているように見えるため、ロールバック カスタム アクションを追加して、延期されたカスタム アクションによって行われた変更を元に戻すことも検討する必要があります。

カスタム アクションを適切に記述することは非常に困難です。これが、カスタム アクションがインストールの失敗の最大の原因である理由の一部です。カスタム アクションの記述を避けることができる場合は、そうすることを強くお勧めします。:)

于 2013-04-09T05:42:56.700 に答える