いくつかのSQLを構成するカスタムアクションを起動するためのセットアップを作成する必要があります。WiXセットアップが同じカスタムアクションをサイレントモードと「通常の」モードで起動する
これは私の配列である。
ここ<InstallExecuteSequence>
<Custom Action='StartCustomAction' After='InstallFinalize'>NOT Installed</Custom>
</InstallExecuteSequence>
私は私のカスタムアクションを呼び出す:
<Fragment>
<Binary Id="CustomActionBinary" SourceFile="$(var.InfPro.dotigaRuntimeSetup.CustomActions.TargetDir)$(var.InfPro.dotigaRuntimeSetup.CustomActions.TargetName).CA.dll"/>
<CustomAction Id="StartCustomAction" BinaryKey="CustomActionBinary" DllEntry="ShowInitialForm" Execute="immediate" Return="check"/>
</Fragment>
これは私のカスタムアクションです:
[CustomAction]
public static ActionResult ShowInitialForm(Session session)
{
int i = Convert.ToInt32(session["UILevel"]);
if (i == 2)
{
StreamWriter file = new StreamWriter("c:\test.txt");
file.WriteLine("Test");
file.Close();
}
else {
InitialForm f = new InitialForm();
if (f.ShowDialog() == DialogResult.Cancel)
return ActionResult.UserExit;
}
return ActionResult.Success;
}
重要なセクションでは、IF-ですブロック。テスト目的のために、私はファイルを作成し、インストーラがサイレント実行されたときに "Test"を書きたいと思っています。 Microsoftによると、UILevelプロパティは2である必要があります。https://msdn.microsoft.com/en-us/library/windows/desktop/aa372096(v=vs.85).aspx
残念ながら何も起こりません。カスタムアクションが呼び出されたかどうかはわかりません。
私はhttp://wixtoolset.org/documentation/manual/v3/customactions/qtexec.htmlにアクセスし、カスタムアクションタグでDllEntry = "WixSilentExec"を使用できますが、DLLエントリがカスタムアクションメソッドの名前であることがわかっている限り、見ました。私の場合はShowInitialForm。
ありがとうございました。 ;)
カスタムアクションが呼び出された場合、何が起きているかを見るためにmsilexec/I [path to msi]/l * vx [テキストログファイルへのパス]を入力し、UILevelプロパティの値を表示します。 WiXを使用している場合は、この情報をインストーラのUIにカスタムダイアログで収集し、プロパティにコードを渡す必要があります。 MTAを使っているmsiexecプロセスからのコールバックで、機能的なメッセージループを持つSTAウィンドウスレッドで実行されていないため、ダイアログが機能しないと思われます。 – PhilDW
サイレントモードでインストーラを起動するとダイアログが正常に動作します。私は、UILevelが2であるという.logファイルを生成しました.BBRの答えに対する私のコメントを見てください。 – Maxlisui
フルUIモードでこのファイルを書き込もうとしましたか? – BBR