c# - Wix:托管 BA 命令行无效

标签 c# wix bootstrapper burn

在玩 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。

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

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

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

非常感谢。

最佳答案

关键是选择 -quiet 标志并且显示 UI,而只是执行请求的操作。

这是通过 Bootstrapper 基类使用 DisplayMode 属性公开的,该属性使用 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
        }
    }

关于c# - Wix:托管 BA 命令行无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21989084/

相关文章:

c# - 如何显示没有链接的PDF文件

C# 从另一个类引用文本框

c# - 如何在使用 asp.net 或 jquery 保存之前在文件上传控件中预览上传的图像?

wix - 安装完成后启动应用程序,并打开UAC

wix - 为什么安装程序在单击快捷方式后运行?

c# - Java中的包等于C#中的包?

c# - WiX 安装程序在静默和 "normal"模式下启动相同的自定义操作

.net - WiX 安装程序应始终以管理员身份运行

twitter-bootstrap - 在 BootStrap Container Dive 中将 .well Div 居中

c# - WiX - 如何使用配置文件来决定运行哪个 MSI?