微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wix 刻录自定义 UI 运行静默覆盖默认属性

如何解决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 举报,一经查实,本站将立刻删除。