2012-03-08 13 views

答えて

13

を行う際に、最終的な解決策は、のようだった上、後であなたを助けるカスタムアクションのすべての種類を見てみることをお奨めこれは:

<CustomAction Id="Install" Directory="APPLICATIONROOTDIRECTORY" 
       Execute="deferred" Impersonate="no" Return="ignore" 
       ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -install" /> 

<CustomAction Id="Uninstall" Directory="APPLICATIONROOTDIRECTORY" 
       Execute="deferred" Impersonate="no" Return="ignore" 
       ExeCommand="[APPLICATIONROOTDIRECTORY]MyExeName.exe -uninstall" /> 

<InstallExecuteSequence> 

    <Custom Action='Install' After='InstallFiles' > 
    $ProductComponent = 3 
    </Custom> 

    <Custom Action='Uninstall' After='InstallInitialize' > 
    ?ProductComponent = 3 
    </Custom> 

</InstallExecuteSequence> 

改善をお勧めしますか?

+0

ProductComponentとは何ですか? –

17

は本当にカスタムアクションのすべてのタイプを説明するセクション管理者権限を必要とするカスタムアクションをオーサリングする方法

linkでこのblogを見てください。 CustomAction Wixの要素。

これはもう少しお手伝いします。あなたはタイプ18のCustomActionをやっているように見えるあなたのソリューションを見た後

は、ここで私は、これらのタイプのために、以前のブログの内容を貼り付け:

カスタムアクションタイプ18 が一緒にインストールされた実行可能ファイルを呼び出します。現在のセッション中のアプリケーション。 CustomActionテーブルのSource列には、Fileテーブルのレコードのキーが含まれています。

CustomActionテーブルの[ターゲット]列には、実行可能ファイルのコマンドライン文字列が含まれています。 すべてのリターン処理、実行スケジューリング、およびスクリプト内実行オプションが適用されます。カスタムアクションへ

If the source file is not already installed on the computer: 
    Custom action must be sequenced after CostFinalize action because only after this action path to the file can be resolved. 
If the source file is not already installed on the computer: 
    Deferred custom actions of this type must be sequenced after the InstallFiles action. 
    Non-deferred custom actions of this type must be sequenced after the InstallFinalize action. 

エントリポイントは、インストール・セッションへのハンドルを受け取ります。ファイルをアプリケーションと一緒にインストールされているので、カスタムアクションタイプ18の塩基配列決定は制限があり

です。遅延カスタムアクションの実行中にセッションが存在しなくなる可能性があります。プロパティの値を取得するには、CustomActionDataプロパティを使用します。ここで

はウィックスでタイプ18カスタムアクションを追加する方法を次のとおりです。

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Component Id="Component1" 
      Guid="*"> 
    <File Id="MyCA" Name="MyCA.exe" /> 
    </Component> 
</Directory> 

<CustomAction Id="DoSomething" 
       FileKey="MyCA" 
       ExeCommand="-switch" 
       Execute="deferred" 
       Return="check" 
       HideTarget="no" 
       Impersonate="no" /> 

<InstallExecuteSequence> 
    <Custom Action="DoSomething" Before="InstallFinalize" /> 
</InstallExecuteSequence> 

まず、我々はファイルのテーブルにMyCA.exeを追加します。

また、CustomActionテーブルにタイプ18のカスタムアクションを追加します。 FileKey属性は、カスタムアクションdllを持つ要素を指します。 ExeCommand属性は、実行可能ファイルのコマンドライン文字列を指定します。

最後に行う必要があるのは、必要なすべてのシーケンステーブルでカスタムアクションをスケジュールすることです。

これが欠けているものを並べ替え、あなたを助ける必要がありますが、私は強くあなたがより多くのインストーラので

+0

:ファイル名

ブートストラップ

から行われます。正しいシーケンスポイントにカスタムアクションをインストールし、アップグレードシナリオ、修理などに適切な条件を使用する必要があります:( – user626528

+0

これはあなたの質問に答えるもので、CAの実行方法の明確なガイドラインを示しています。 –

+2

@Yan Sklyarenko、それは本当の答えの10%です – user626528

5

インストール&修理手順で「削除しない」を追加できます。そして、 'アンインストールシーケンスの場合のみAND(REMOVE = "ALL")をインストールしてください。これはウィックスツールセットに苦しんで誰かに役立つだろう

<InstallExecuteSequence> 
     <Custom Action='Install' After='InstallFiles' > 
     NOT REMOVE 
     </Custom> 

     <Custom Action='Uninstall' After='InstallFiles' > 
     Installed AND (REMOVE = "ALL") 
     </Custom> 

    </InstallExecuteSequence> 
0

希望 タグ:のCustomAction、がInstallExecuteSequence、実行ウィックスのインストール後にexeファイルの完全な、ウィックス

内のバイナリまたはリソースファイル

けれども、どのように見つけることができませんこれは、それが動作させるには十分ではありませんProduct.wxs

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="*" Name="TestingQtExec" Language="1033" Version="1.0.0.0" 
      Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

    <MediaTemplate EmbedCab="yes" /> 

    <Feature Id="ProductFeature" Title="TestingQtExec" Level="1"> 
     <ComponentGroupRef Id="ProductComponents" /> 
    </Feature> 

    <Binary Id="WixCA1" 
       SourceFile="FTDI.exe"/> 

    <!-- install plugin --> 
    <CustomAction Id="FTDIInstall" 
       BinaryKey ="WixCA1" 
       ExeCommand="/passive" 
       Execute="commit" 
       Return="asyncNoWait" 
       HideTarget="no" 
       Impersonate="no" /> 


    <InstallExecuteSequence> 

     <Custom Action="FTDIInstall" Before="InstallFinalize" /> 
    </InstallExecuteSequence> 

       </Product> 

    <Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="TestingQtExec" /> 
     </Directory> 
    </Directory> 
    </Fragment> 

    <Fragment> 
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
     <Component Id="cmpSampleTXT" Guid="*"> 
     <File Source="Sample.txt" /> 
     </Component> 
    </ComponentGroup> 
    </Fragment> 
</Wix> 
+0

これは元のポスターに関する質問にどのように答えてくれますか? – Kmeixner

関連する問題