1 つの解決策は、ファイルの存在を確認するための即時実行カスタム アクションを作成することです。その場合は、プロパティを設定し、そのプロパティを初期化カスタム アクションの条件で使用します。
以下の C# マネージ カスタム アクションの例では、"SOMEPROPERTY" の値を取り、対応するディレクトリが存在する場合は、プロパティ RUNINITDB=1 を設定します。その後、初期化カスタム アクションの条件で RUNINITDB を使用できます。プロパティ RUNINITDB が存在する場合は、カスタム アクションを実行します。
[CustomAction]
public static ActionResult CheckInitDb(Session session)
{
session.Log("Begin CheckInitDb");
string dir = session["SOMEPROPERTY"]; //or you could figure this out programmatically
if(!Directory.Exists(dir))
{
session["RUNINITDB"] = "1";
session.Log("Setting RUNINITDB bit.");
}
return ActionResult.Success;
}
上記のカスタム アクション プロジェクトを作成するには、新しい Visual Studio プロジェクトを作成し、Windows インストーラー XML テンプレートで [C# カスタム アクション プロジェクト] を選択します。
インストーラ XML ソース コードでカスタム アクションを参照するには、カスタム アクションが InstallHelper.CA.dll という名前の dll にあると仮定すると、次のようなコードになる可能性があります。カスタム アクション CallToRunInitDB は、プロパティ RUNINITDB が設定されている場合にのみ実行されることに注意してください。
<Binary Id="InstallHelper" SourceFile="InstallHelper.CA.dll"/>
<CustomAction Id="CheckInitDb" BinaryKey="InstallHelper" DllEntry="CheckInitDb" Execute="immediate" Return="check"/>
<InstallExecuteSequence>
<Custom Action="CheckInitDb" Before="InstallInitialize">NOT (REMOVE ~= "ALL")</Custom>
<Custom Action="YourCallToRunInitDB" After="InstallInitialize">RUNINITDB</Custom>
</InstallExecuteSequence>
WiX マネージド カスタム アクションに慣れていない場合は、SO で他のサンプル コードを見つけることができるかもしれません: https://stackoverflow.com/search?q=wix+managed+custom+action