2011-02-11 7 views
13

WiXセットアップを実行しているときに、アクションのリストとそのシーケンスを探していました。どういうわけか公式サイトは情報を提供していないようです。WiXアクションシーケンス

基本的な問題は、私は正しく私のカスタムアクションをスケジュールすることです。通常、regsvr32.exeでDLLを登録する必要があります。これは、ファイルがハードドライブにコピーされた後にのみ実行できます。ただし、カスタムアクション

<Custom Action="RegisterShellExt" After="InstallFiles"> 

エラーメッセージ "ファイルが見つかりません"で失敗しました。

MSIのWiX編集ログを分析していますが、InstallFilesアクションが複数回存在することがわかりました。そして、効果的にファイルは2回目の表示時にのみ書き込まれます。だから私は、次のように私のカスタムアクションを変更:ここで

<Custom Action="RegisterShellExt" Before="InstallFinalize"> 

は、私は私のMSIのログから抽出されてきた配列である。

Action start 15:16:49: INSTALL. 
Action start 15:16:49: PrepareDlg. 
Action start 15:16:49: AppSearch. 
Action start 15:16:49: LaunchConditions. 
Action start 15:16:49: ValidateProductID. 
Action start 15:16:49: DIRCA_NEWRETARGETABLEPROPERTY1.5D429292039C46FCA3253E37B4DA262A. 
Action start 15:16:50: CostInitialize. 
Action start 15:16:50: FileCost. 
Action start 15:16:50: CostFinalize. 
Action start 15:16:50: WelcomeDlg. 
Action 15:16:51: LicenseAgreementDlg. Dialog created 
Action 15:16:53: CustomizeDlg. Dialog created 
Action 15:16:55: VerifyReadyDlg. Dialog created 
Action start 15:16:56: ProgressDlg. 
Action start 15:16:56: ExecuteAction. 
Action start 15:16:58: INSTALL. 
Action start 15:16:58: AppSearch. 
Action start 15:16:58: LaunchConditions. 
Action start 15:16:58: ValidateProductID. 
Action start 15:16:58: CostInitialize. 
Action start 15:16:59: FileCost. 
Action start 15:16:59: CostFinalize. 
Action start 15:16:59: InstallValidate. 
Action start 15:17:00: InstallInitialize. 
Action start 15:17:08: ProcessComponents. 
Action 15:17:09: GenerateScript. Generating script operations for action: 
Action ended 15:17:09: ProcessComponents. Return value 1. 
Action start 15:17:09: UnpublishFeatures. 
Action start 15:17:09: RemoveShortcuts. 
Action start 15:17:09: RemoveFiles. 
Action start 15:17:09: InstallFiles. 
Action start 15:17:10: CreateShortcuts. 
Action start 15:17:10: RegisterUser. 
Action start 15:17:10: RegisterProduct. 
Action start 15:17:10: PublishFeatures. 
Action start 15:17:10: PublishProduct. 
Action start 15:17:10: ConfigureInstaller. 
Action start 15:17:10: InstallFinalize. 
Action 15:17:10: ProcessComponents. Updating component registration 
Action 15:17:12: InstallFiles. Copying new files 
Action 15:17:21: CreateShortcuts. Creating shortcuts 
Action 15:17:21: RegisterProduct. Registering product 
Action 15:17:23: ConfigureInstaller. [[note: CustomAction]] 
Action 15:17:22: PublishFeatures. Publishing Product Features 
Begin CustomAction 'ConfigureInstaller' 
Action 15:17:28: RollbackCleanup. Removing backup files 
Action ended 15:17:28: InstallFinalize. Return value 1. 
Action start 15:17:28: RegisterShellExt. [[note: CustomAction]] 
Action ended 15:17:33: INSTALL. Return value 1. 
Action start 15:17:35: ExitDialog. 

誰もが公式のリストを知っていますか?

答えて

13

短い答えは - (それは私はそれがないと思われ、インストールされたファイルに依存している場合)あなたは、カスタムアクションが延期やスケジュールINSTALLFILES後に行う必要があります。

長い答え - あなたは、スクリプト実行期間と知り合い必要があります。 Read more about it on MSDN。ログファイルに初めてInstallFilesが表示されるのは、即時アクションが実行され、遅延アクションが作成され、インストールスクリプトにスケジュールされるときです。 2回目は、実際にファイルを実行する(そしてファイルをインストールする)ときです。あなたのアクションを延期させると、ログファイルに同じ動作が表示されます。

これは非常に明確ではないに聞こえるかもしれないが、それは、あなたは動作するように設計されている方法についての詳細を読むことができないまで。

+0

ありがとうございます!私は短い答えに固執する瞬間です:)実際には、答えは私には明らかです。最初にタスクを準備しますが、それを即座に行うと実際の作業が始まるまで待たされることはありません。 –

+1

しかし、一連の行動の公式リストはありますか?さもなければ、ばかばかしいと思われる試行錯誤が必要です。 – markmnl

5

DLLを登録する場合は、自己登録を避けることをお勧めします。

私たちは私たちのために登録をしてWiXのフラグメントを生成するために、HEATコマンドを使用します。

使用

heat file myfile.dll -o myfile.wxs 

この利点は、レジストリエントリがインストールされ、正しく除去され、ファイルが登録が行われている時にインストールされているかどうかに問題がないことです。

+0

入力していただきありがとうございます。私はdllを登録するための特別なスクリプトがあることを知らなかった。その瞬間、私はカスタムアクションを維持しますが、残りのインストーラが正常に機能するとすぐに、ヒートコマンドがどのように動作するかを見ていきます。 –

+0

私はヒートユーティリティを使用しようとしていましたが、HEAT5150の警告を過ぎることはできません。私はこの警告の結果、結果として得られるwxsファイルに有用なコードがなく、 'Directory'と' Component'フラグメントのみが含まれていると思います。 'heat.exe:warning HEAT5150:SelfReg DLLであると予想されたファイルからデータを収集できませんでした:(...)呼び出しの対象によって例外がスローされました。 ' –

+1

WiXメーリングリストで見つかったいくつかのこと:1)64ビットDLLでは動作しないことがあります。 2)Administratorとして熱を発散させてみてください。3)このページのhttp://www.installsite.org/pages/en/msi/tips.htmに記載されているようにRegSpyを実行してください。これにより熱に変換するための.regファイルが作成されます。 wxs。 4)欠落している依存関係がないことを確認してください – AntonyW