次の変数を持つ書き込みバンドルがあります
<Variable Name="INSTALLFOLDER" Type="string "Value="[ProgramFilesFolder]" />
私のブートストラッパー UI プロジェクトのメイン ビュー モデルに次のプロパティを使用します。
public string InstallDirectory
{
get
{
if (_Engine.StringVariables.Contains("INSTALLFOLDER"))
return _Engine.StringVariables["INSTALLFOLDER"];
return string.Empty;
}
set
{
if (_Engine.StringVariables.Contains("INSTALLFOLDER"))
{
_Engine.StringVariables["INSTALLFOLDER"] = value;
OnPropertyChanged("InstallDirectory");
}
}
}
InstallDirectory プロパティにテキスト ボックスがバインドされている WPF ビューでは、「[ProgramFilesfolder]」しか表示されませんが、「C:\Program Files」のようなものを表示したいと考えていました。
インストールディレクトリのテキストボックスにデフォルトのインストールフォルダを入力し、そこで変更するオプションをユーザーに提供する次のようなものになりたいと思います。
<Variable Name='INSTALLFOLDER' Type='string' Value='[ProgramFilesFolder]$(var.AppName)' />
Net Framework を使用して WPF UI のプログラム ファイル フォルダーを取得できましたが、Wix バンドルから取得できるようです。また、Wix ログは、UI から INSTALLFOLDER プロパティを設定していることを示しています。
私のブートストラッパーの実行は次のようになります。
protected override void Run()
{
this.Engine.Log(LogLevel.Verbose, "Run has been called on the UI application.");
CurrentDispatcher = Dispatcher.CurrentDispatcher;
_MainWindow = new MainWindow(new MainWindowViewModel(this));
Engine.Detect();
_MainWindow.Show();
Dispatcher.Run();
Engine.Quit(0);
}
BootstrapperApplication で何らかのイベントをリッスンする必要があるかもしれないと考えました。その後、InstallDirectory プロパティの変更されたプロパティで起動できますが、まだ興味深いものは見つかりませんでした。
私は 3.6 の開発者ガイド ブックを読みましたが、最後の 2 つの章では書き込みプロジェクトと WPF を扱っていますが、この正確な問題に対処していないようです。