5

カスタム ユーザー インターフェイスを使用して WPF セットアップ アプリケーションを作成しています。Bryan P. Johnston のチュートリアルから始めました: http://bryanpjohnston.com/2012/09/28/custom-wix-managed-bootstrapper-application/

私の見解のどこかに、私の のプロパティにTextBoxバインドする単純なものがあります。InstallationPathMainViewModel

ここで、ユーザーが「インストール」をクリックしたときにこのパスを使用したいと考えています。このために、にバインドするボタンがありますInstallCommand。次のメソッドが呼び出されます (チュートリアルから直接取得)。

private void InstallExecute()
{
    Bootstrapper.Engine.Plan(LaunchAction.Install);
}

パッケージをプロパティのディレクトリにインストールするにはどうすればよいInstallationPathですか?


編集:

Stackoverflow で同様の質問を見つけました。

Burn マネージド ブートストラップ内の WiX でパッケージの INSTALLLOCATION を指定する

答えはボブ・アーンソンから

MsiPackage ごとに MsiProperty 子を使用して、INSTALLLOCATION=[BurnVariable] を指定します。次に、Engine.StringVariables を使用して BurnVariable を設定します。

今、私はこのようStringVariablesに私の中にアクセスできると思いますInstallExecute

private void InstallExecute()
{
    Bootstrapper.Engine.StringVariables["BurnVariable"] = InstallationPath;
    Bootstrapper.Engine.Plan(LaunchAction.Install);
}

しかし、この変数をどこで定義するのでしょうか? Product.wxs のどこかでしょうか。

4

3 に答える 3

7

はい、書き込みブートストラッパーに変数を作成するだけです。

<Variable Name="BurnVariable"
          bal:Overridable="yes" />

次に、これをパラメータとしてブートストラップされたmsiパッケージに渡すことができます。

<MsiPackage SourceFile="$(var.YourMsiProject.Installer.TargetPath)" Compressed="no">
    <MsiProperty Name="INSTALLLOCATION" Value="[BurnVariable]" />          
</MsiPackage>
于 2013-02-22T11:38:06.477 に答える
0

私もこの伝説的なチュートリアルを使用しています。verable を別のことに使いたかったのです。つまり、変数は、プログラムをインストールする必要があるかどうかを示します。問題は、InstallExecute() で呼び出したときに変数が上書きされないことです。私の問題では、次のように機能します。

  protected override void Run()
    {
        this.Engine.Log(LogLevel.Verbose, "Launching custom TestBA UX");
        BootstrapperDispatcher = Dispatcher.CurrentDispatcher;


        MainViewModel viewModel = new MainViewModel(this);
        viewModel.Bootstrapper.Engine.Detect();

        MainView view = new MainView();
        this.Engine.StringVariables["SqlStatus"] = view.CheckInstalledSQL() == true ? "true" : "false";
        this.Engine.StringVariables["SsmsStatus"] = view.CheckInstalledSSMS() == true ? "true" : "false";
        view.DataContext = viewModel;
        view.Closed += (sender, e) => BootstrapperDispatcher.InvokeShutdown();
        view.Show();
        Dispatcher.Run();

        this.Engine.Quit(0);
    }

ブートストラップ:

<Variable Name="SqlStatus" bal:Overridable="yes" Value="false" Type="string"/>
<Variable Name="SsmsStatus" bal:Overridable="yes" Value="false" Type="string"/>
...

<ExePackage Id="SSMS" Name="SQLServerManagementStudio" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
    InstallCommand="/install /Passive SSMSInstallRoot=C:\\Program Files\\Microsoft SQL Server /norestart"
    SourceFile="C:\Users\..\Downloads\SSMS-Setup-ENU.exe"
    DetectCondition="SsmsStatus = &quot;true&quot;"/>
于 2020-05-12T11:11:00.313 に答える