如何解决wix 刻录自定义 UI 运行静默覆盖默认属性
我创建了 2 个简单的 wix msi 并将它们捆绑到一个刻录安装程序中。我不喜欢刻录中的默认 UI,我在这里发现了 Andrei Mușat 的自定义 UI 很棒的示例:Custom BURN UI
我想以静默模式运行它 在 UI Bootstrapper 中,运行 cmd:
protected override void Run()
{
Engine.Log(LogLevel.Verbose,"Entry point of WiX - Run method");
using (var container = SetupCompositionContainer())
{
bootstrapperBundleData = new BootstrapperBundleData();
Engine.Log(LogLevel.Verbose,JsonConvert.SerializeObject(bootstrapperBundleData));
// Create main window with associated view model
installerUIWindow = container.GetExportedValue<Window>("InstallerUIWindow");
installerUIWindowHandle = new WindowInteropHelper(installerUIWindow).EnsureHandle();
Engine.Detect();
if (Command.display == display.Passive || Command.display == display.Full)
{
installerUIWindow.Show();
}
else{
Engine.Log(LogLevel.Verbose,"Running silent mode");
}
dispatcher.Run();
Engine.Quit(0);
Engine.Log(LogLevel.Verbose,"Exiting custom WPF UI.");
}
}
在 InstallerUIWINdowviewmodel 中,我看到:
InstallCommandValue = new DelegateCommand(
() => engine.Plan(LaunchAction.Install),() => !Installing && Status == InstallationStatus.DetectedAbsent);
UninstallCommandValue = new DelegateCommand(
() => engine.Plan(LaunchAction.Uninstall),() => !Installing && Status == InstallationStatus.DetectedPresent);
CancelCommandValue = new DelegateCommand(
() => IsCancelled = true);
那么如何在不显示 UI 的情况下调用 InstallCmd?
谢谢
解决方法
该代码并不是真正针对该场景构建的。
我认为您想要做的是仅在计划显示窗口时创建窗口,否则创建视图模型(如果您计划显示窗口,则只需要获取窗口句柄)。然后,而不是调用 Dispatcher.Run();
call
Dispatcher.Invoke(() =>
{
if (installerVM.UninstallCommandValue.CanExecute())
{
installerVM.UninstallCommandValue.Execute();
}
if (installerVM.InstallCommandValue.CanExecute())
{
installerVM.InstallCommandValue.Execute();
}
});
我还没有测试过这个,但看起来这应该可以完成工作(或者至少让你更接近)。
告诉我进展如何。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。