gpt4 book ai didi

wpf - 使用 Burn Bootstrapper 项目获取应用程序版本

转载 作者:行者123 更新时间:2023-12-05 02:20:42 27 4
gpt4 key购买 nike

通常在Bundle.wxs 文件中设置EXE 版本。是否可以在编写安装程序后端引擎逻辑的 Bootstrapper Application 项目中获取此版本?我使用 WPF 创建了一个自定义 UI。我需要在 UI 中显示版本。我怎样才能做到这一点?请指教。下面是我的 Bootstrapper 应用程序代码。

    public class MainViewModel : ViewModelBase
{
private MINAClient minaClient;

//constructor
public MainViewModel(BootstrapperApplication bootstrapper)
{

this.IsThinking = false;

this.Bootstrapper = bootstrapper;
this.Bootstrapper.ApplyComplete += this.OnApplyComplete;
this.Bootstrapper.DetectPackageComplete += this.OnDetectPackageComplete;
this.Bootstrapper.PlanComplete += this.OnPlanComplete;
this.Bootstrapper.DetectComplete += this.DetectComplete;

this.Bootstrapper.CacheAcquireProgress += (sender, args) =>
{
this.cacheProgress = args.OverallPercentage;
this.Progress = (this.cacheProgress + this.executeProgress) / 2;
};
this.Bootstrapper.ExecuteProgress += (sender, args) =>
{
this.executeProgress = args.OverallPercentage;
this.Progress = (this.cacheProgress + this.executeProgress) / 2;
};

minaClient = new MINAClient();
minaClient.initConnection("127.0.0.1", 9123);
}

#region Properties

private bool installEnabled;
public bool InstallEnabled
{
get { return installEnabled; }
set
{
installEnabled = value;
RaisePropertyChanged("InstallEnabled");
}
}

private bool uninstallEnabled;
public bool UninstallEnabled
{
get { return uninstallEnabled; }
set
{
uninstallEnabled = value;
RaisePropertyChanged("UninstallEnabled");
}
}

private bool isThinking;
public bool IsThinking
{
get { return isThinking; }
set
{
isThinking = value;
RaisePropertyChanged("IsThinking");
}
}

private int progress;
public int Progress
{
get { return progress; }
set
{
this.progress = value;
minaClient.sendMessage(value);
RaisePropertyChanged("Progress");
}
}

private int cacheProgress;
private int executeProgress;

public BootstrapperApplication Bootstrapper { get; private set; }

#endregion //Properties

#region Methods

public void InstallExecute()
{
Bootstrapper.Engine.Log(LogLevel.Verbose, "See actually i've called install method");
IsThinking = true;
Bootstrapper.Engine.Plan(LaunchAction.Install);
}

public void UninstallExecute()
{
Bootstrapper.Engine.Log(LogLevel.Verbose, "See actually i've called un-install method");
IsThinking = true;
Bootstrapper.Engine.Plan(LaunchAction.Uninstall);
}

public void ExitExecute()
{
CustomBA.BootstrapperDispatcher.InvokeShutdown();
}


/// <summary>
/// Method that gets invoked when the Bootstrapper ApplyComplete event is fired.
/// This is called after a bundle installation has completed. Make sure we updated the view.
/// </summary>
private void OnApplyComplete(object sender, ApplyCompleteEventArgs e)
{
IsThinking = false;
InstallEnabled = false;
UninstallEnabled = false;
this.Progress = 100;
ExitExecute();
}

void DetectComplete(object sender, DetectCompleteEventArgs e)
{
Bootstrapper.Engine.Log(LogLevel.Verbose,"fired! but does that give you any clue?! idiot!");
if (LaunchAction.Uninstall == Bootstrapper.Command.Action)
{
Bootstrapper.Engine.Log(LogLevel.Verbose, "Invoking automatic plan for uninstall");
Bootstrapper.Engine.Plan(LaunchAction.Uninstall);
}
}

/// <summary>
/// Method that gets invoked when the Bootstrapper DetectPackageComplete event is fired.
/// Checks the PackageId and sets the installation scenario. The PackageId is the ID
/// specified in one of the package elements (msipackage, exepackage, msppackage,
/// msupackage) in the WiX bundle.
/// </summary>
private void OnDetectPackageComplete(object sender, DetectPackageCompleteEventArgs e)
{
if (e.PackageId == "UpdaterServiceInstallerId" || e.PackageId == "MosquittoInstallerId" || e.PackageId == "AppsInstallerId")
{
if (e.State == PackageState.Absent)
InstallEnabled = true;

else if (e.State == PackageState.Present)
UninstallEnabled = true;
}
}

/// <summary>
/// Method that gets invoked when the Bootstrapper PlanComplete event is fired.
/// If the planning was successful, it instructs the Bootstrapper Engine to
/// install the packages.
/// </summary>
private void OnPlanComplete(object sender, PlanCompleteEventArgs e)
{
if (e.Status >= 0)
Bootstrapper.Engine.Apply(System.IntPtr.Zero);
}


#endregion //Methods

#region RelayCommands

private RelayCommand installCommand;
public RelayCommand InstallCommand
{
get
{
if (installCommand == null)
installCommand = new RelayCommand(() => InstallExecute(), () => InstallEnabled == true);

return installCommand;
}
}

private RelayCommand uninstallCommand;
public RelayCommand UninstallCommand
{
get
{
if (uninstallCommand == null)
uninstallCommand = new RelayCommand(() => UninstallExecute(), () => UninstallEnabled == true);

return uninstallCommand;
}
}

private RelayCommand exitCommand;
public RelayCommand ExitCommand
{
get
{
if (exitCommand == null)
exitCommand = new RelayCommand(() => ExitExecute());

return exitCommand;
}
}

#endregion //RelayCommands
}

最佳答案

var bundleVersion = Bootstrapper.Engine.VersionVariables["WixBundleVersion"];

关于wpf - 使用 Burn Bootstrapper 项目获取应用程序版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com