2015-04-15 35 views
1

我无法使用ConfigureProduct进行卸载,无声地运行。我有以下几点:使用Microsoft.Deployment.WindowsInstaller.Installer.ConfigureProduct以静默方式卸载?

using Microsoft.Deployment.WindowsInstaller; 

Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "/q"); 

根据一些早期的帖子“/ Q”应该工作,除了每次我运行代码时出现以下情况例外。

"Invalid command line argument. Consult the Windows Installer SDK for detailed command line help." 

注意,“/ Q”使用msiexec.exe的,但我想做到这一点使用Microsoft.Deployment.WindowsInstaller时不工作。

我也曾尝试UI设置为静音下列要求:

Installer.SetInternalUI(InstallUIOptions.Silent); 
Installer.ConfigureProduct(productCode, 0, InstallState.Absent, ""); 

但后来我得到以下异常:

"Fatal error during installation." 

从消息据我了解,SetInternalUI是安装,而不是的卸载但不确定。

我正在使用版本为2.0.50727的WiX 3.9 R2安装中的DLL。

任何帮助表示赞赏。谢谢!

编辑:我在“ConfigureProduct”方法中对“commandLine”参数的注释看起来更接近一些。

// commandLine: 
    //  Specifies the command line property settings. This should be a list of the 
    //  format Property=Setting Property=Setting. 

所以基本上没有,你不能传递“/ Q”,“/ L”,或其他任何不在表“属性=设置”。答案中链接的参考文章中的例子似乎是错误的。 (或其它版本之间的改变,但我对此表示怀疑。)

回答

1

如果它正常卸载没有任何错误,那么最可能的问题是卸载需要提升并且代码没有运行提升,因此失败。在静音卸载期间它不会要求用户提升!

SetInternalUI适用于卸载。例如,下面的C++代码段不正是你想要的东西,使得卸载完全沉默:

INSTALLUILEVEL il = MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); 
UINT n = MsiConfigureProductEx(productid, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, L"REBOOT=R"); 

和ConfigureProduct呼叫使用相同的API。

+0

是的,这就是我得到致命错误的原因。我从一个提升的命令提示符启动了程序,它工作。有没有简单的方法使用Microsoft.Deployment.WindowsInstaller API以提升模式运行ConfigureProduct? – user2958211

1

尝试不同的方法来卸载MSI文件此引用(选项6描述DTF):

不幸的是我没有的Visual Studio可在瞬间与测试 - 我还是会搏一搏,虽然我不能测试任何东西。不用说,这使得回答困难:

  • 您的无声卸载程序可能会崩溃,这就是为什么它在无声模式下失败。
  • 通常情况下,这将涉及自定义操作,该操作可能无法正常调节并且运行不正确(或者完全不在静音模式下运行)。

尝试在无提示卸载期间启用日志记录,如此处所示(适当调整日志文件的路径)。特别的标志刷新日志文件 - 这意味着它是分批所以没有记录因输给任何潜在的崩溃(这减慢了(UN)的安装大大过程)连续而不是写:

using Microsoft.Deployment.WindowsInstaller; 

public static void Uninstall(string productCode) 
{ 
    Installer.SetInternalUI(InstallUIOptions.Silent); 
    Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\" /L*V! c:\uninstall.log"); 
} 

要找到日志文件中的相关信息,请查看此log file checking tip from Rob Mensching(Wix的创建者)。

+0

哇,你花了多长时间写下来?而且你必须真正挖掘出WAY才能找到一个我仍在使用VBScript的时代。 :) –

+0

似乎10年。看起来可怜的普尼特不知道“富”是什么意思。 https://community.flexerasoftware.com/showthread.php?153737-How-to-uninstall-a-product-without-using-msiexec-exe –

+0

这是编辑和扩展数十次的那些“演变主题”之一。而且VBScript也足够好用了。世界上最糟糕的错误处理并不好,但简单而有效。 –

相关问题