C# Wix:托管BA命令行无效
在玩时,首先我安装了1.0.0.0。 然后我将版本增加到1.0.0.1,并记录该过程。以下是在升级过程中传递-uninstall-quite命令行的部分:C# Wix:托管BA命令行无效,c#,wix,bootstrapper,burn,C#,Wix,Bootstrapper,Burn,在玩时,首先我安装了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 s
[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
问题:如何让它理解其命令行参数并在不显示卸载对话框的情况下执行此过程
我还在WIX3.7源代码的WixBA项目中进行了咨询,但它的命令行处理只是处理InstallFolder参数
我真的很感激任何帮助,因为这个升级方案阻碍了我的引导程序项目
非常感谢。关键是选择
-quiet
标志,然后not显示一个UI,而只是执行所请求的操作
这是通过使用DisplayMode
属性的引导程序基类公开的,该属性使用Display
enum值。选择是
public enum Display
{
Unknown,
Embedded,
None,
Passive,
Full,
}
然后,您可以通过使用LaunchAction
enum的Command.action
值(同样在引导程序基类中)来确定要执行的操作。选项包括:
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
}
}
//
///如果在静默显示模式下运行(即:无UI),则为True。
///
公共虚拟布尔运行静默
{
得到
{
返回(DisplayMode!=Display.Full&&DisplayMode!=Display.Passive);
}
}
受保护的覆盖无效运行()
{
如果(运行静音)
{
日志(“无UI运行”);
LaunchAction requestedAction=Command.Action;
//…这是一个异步调用,因此请相应地处理它。
引擎计划(请求动作);
//…后跟Engine.Apply();
}
其他的
{
日志(“显示UI窗口”);
//…运行托管用户界面
}
}
谢谢你的提示@John。它是在你的提示下工作的。以下是我在启动对话框(窗体视图)之前在Run()中添加的内容:
顺便说一句,在我的例子中,Command.Display是Display.embedded,这是预期的行为
我真的很感激你的建议。再次感谢。非常感谢@John-m-wright。怀特试图实施你的建议,我遇到了更多的问题,我在这里发布:。如果我犯了一些错误,也请看看这些。
if (Command.Display != Display.Full && Command.Action == LaunchAction.Uninstall)
{
//MessageBox.Show("Let's do Uninstall silentley ");
MyViewModel.PlanAction(LaunchAction.Uninstall);
}