2014-02-24 22 views
2

在使用TestBA Bootstrapper from Bryan時,首先我安裝了1.0.0.0。 然後我將版本增加到1.0.0.1並記錄了過程。這裏是-uninstall -quite命令行進行升級過程中通過的部位:Wix:託管BA命令行不起作用

[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項目。

謝謝你一堆。

回答

4

關鍵是拿起-quiet標誌和而不是顯示一個用戶界面,而是隻執行被請求的操作。

這是通過引導程序基類使用DisplayMode屬性公開的,該屬性使用了枚舉值Display。選項是

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

然後可以決定經由Command.Action值(再次,在引導程序基類),其使用一個LaunchAction枚舉執行哪個動作。選項包括:

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 
     } 
    } 
+0

非常感謝@ John-m-wright。白試圖實現你的建議,我面臨一些更多的問題,我張貼在這裏:http://stackoverflow.com/questions/22011578/is-this-a-bug-in-wix-bootstrapper-command-line。如果我犯了一些錯誤,請看看這些。 –

0

感謝提示@約翰。它在你的提示的幫助下工作。以下是我在運行()添加啓動對話框之前(的形式查看):

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

順便說一句,在我的情況,Command.Display是Display.Embeded,這是預期的行爲。

我真的很感激你的提示。再次感謝。