【问题标题】:Wix: Managed BA command line not effectiveWix:托管 BA 命令行无效
【发布时间】:2014-02-26 20:15:57
【问题描述】:

在玩TestBA Bootstrapper from Bryan 时,我首先安装了 1.0.0.0。 然后我将版本增加到 1.0.0.1 并记录了这个过程。这是升级期间通过 -uninstall -quite 命令行的部分:

[2870:21C0][2014-02-24T17:46:38]i300: Apply begin 
[1A44:1E54][2014-02-24T17:46:41]i360: Creating a system restore point. 
[1A44:1E54][2014-02-24T17:47:15]i361: Created a system restore point. 
[1A44:1E54][2014-02-24T17:47:15]i000: Caching bundle from: 'C:\Users\fwaheed\AppData\Local\Temp\{57a07296-0310-4628-971c-2da38aa09f25}\.be\BootstrapperSetup.exe' to: 'C:\ProgramData\Package Cache\{57a07296-0310-4628-971c-2da38aa09f25}\BootstrapperSetup.exe' 
[1A44:1E54][2014-02-24T17:47:15]i320: Registering bundle dependency provider: {57a07296-0310-4628-971c-2da38aa09f25}, version: 1.0.0.1 
[1A44:2B40][2014-02-24T17:47:16]i305: Verified acquired payload: DummyInstallationPackageId at path: C:\ProgramData\Package Cache\.unverified\DummyInstallationPackageId, moving to: C:\ProgramData\Package Cache\{F1D62AA5-E68C-4B99-A6DD-D7EAE5A1D238}v1.0.0.1\DummyInstaller.msi. 
[1A44:1E54][2014-02-24T17:47:16]i323: Registering package dependency provider: {F1D62AA5-E68C-4B99-A6DD-D7EAE5A1D238}, version: 1.0.0.1, package: DummyInstallationPackageId 
[1A44:1E54][2014-02-24T17:47:16]i301: Applying execute package: DummyInstallationPackageId, action: Install, path: C:\ProgramData\Package Cache\{F1D62AA5-E68C-4B99-A6DD-D7EAE5A1D238}v1.0.0.1\DummyInstaller.msi, arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7"' 
[2870:21C0][2014-02-24T17:47:22]i319: Applied execute package: DummyInstallationPackageId, result: 0x0, restart: None 
[1A44:1E54][2014-02-24T17:47:22]i325: Registering dependency: {57a07296-0310-4628-971c-2da38aa09f25} on package provider: {F1D62AA5-E68C-4B99-A6DD-D7EAE5A1D238}, package: DummyInstallationPackageId 
[1A44:1E54][2014-02-24T17:47:22]i301: Applying execute package: {f1d57671-5e3d-4be7-908f-5a47e72737d9}, action: Uninstall, path: C:\ProgramData\Package Cache\{f1d57671-5e3d-4be7-908f-5a47e72737d9}\BootstrapperSetup.exe, arguments: '"C:\ProgramData\Package Cache\{f1d57671-5e3d-4be7-908f-5a47e72737d9}\BootstrapperSetup.exe" -uninstall -quiet -burn.related.upgrade' 
[2870:21C0][2014-02-24T17:48:54]i319: Applied execute package: {f1d57671-5e3d-4be7-908f-5a47e72737d9}, result: 0x0, restart: None 
[2870:21C0][2014-02-24T17:48:54]i399: Apply complete, result: 0x0, restart: None, ba requested restart:  No 
[2870:21C0][2014-02-24T17:48:55]i500: Shutting down, exit code: 0x0 

问题:它不会安静地卸载,而是显示卸载对话框。如果我单击卸载,它将卸载 1.0.0.0,然后应用程序将升级到 1.0.0.1。

问题:如何让它理解其命令行参数并在不显示卸载对话框的情况下执行该过程?

我还从 Wix 3.7 源代码中咨询了 WixBA 项目,但它的命令行处理仅处理 InstallFolder 参数。

非常感谢任何帮助,因为此升级方案阻止了我的 Bootstrapper 项目。

非常感谢。

【问题讨论】:

    标签: c# wix bootstrapper burn


    【解决方案1】:

    关键是拿起-quiet标志并且显示用户界面,而只是执行所请求的操作。

    这是通过使用 DisplayMode 属性的 Bootstrapper 基类公开的,该属性使用 Display 枚举值。选项是

    public enum Display
    {
      Unknown,
      Embedded,
      None,
      Passive,
      Full,
    }
    

    然后,您可以通过使用 LaunchAction 枚举的 Command.Action 值(同样在 Bootstrapper 基类中)确定要执行的操作。选项是:

    public enum LaunchAction
    {
     Unknown,
     Help,
     Layout,
     Uninstall,
     Install,
     Modify,
     Repair,
    

    }

    所以,我使用了一个名为 RunningSilent 的自定义属性来检测我不应该显示 UI 的模式,然后使用它,如下所示:

        /// <summary>
        /// True if running in silent display mode (ie: no UI).
        /// </summary>
        public virtual bool RunningSilent
        {
            get
            {
                return (DisplayMode != Display.Full && DisplayMode != Display.Passive);
            }
        }
    
        protected override void Run()
        {
            if (RunningSilent)
            {
                 Log("Running without UI");
                 LaunchAction requestedAction = Command.Action;
                 //... this is an async call, so handle it accordingly.
                 Engine.Plan(requestedAction);
                 //... followed by Engine.Apply();
    
            }
            else
            {
                Log("Showing UI window");
                //.. Run your Managed UI
            }
        }
    

    【讨论】:

    • 非常感谢@John-m-wright。 White 试图实施您的建议,但我遇到了更多问题,我在此处发布:stackoverflow.com/questions/22011578/…。如果我在其中犯了一些错误,也请查看这些。
    【解决方案2】:

    感谢@John 的提示。它在您的提示的帮助下工作。这是我在启动对话框(表单视图)之前在 Run() 中添加的内容:

    if (Command.Display != Display.Full && Command.Action == LaunchAction.Uninstall)
    {
       //MessageBox.Show("Let's do Uninstall silentley ");
       MyViewModel.PlanAction(LaunchAction.Uninstall);
    }
    

    顺便说一句,就我而言,Command.Display 是 Display.Embeded,这是预期的行为。

    我非常感谢您的提示。再次感谢。

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 2021-05-02
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 2020-06-21
      相关资源
      最近更新 更多