卸载C#应用程序 - InstallShield试用版

时间:2014-01-22 20:18:29

标签: c# winforms installshield uninstall

我在InstallShield Evaluation Version 2013上安装了一个C#应用程序,我想从另一个C#应用程序中卸载它


我运行这个过程就像这样卸载它:

  

p.StartInfo.FileName =“msiexec.exe”;

            p.StartInfo.UseShellExecute = false;
            p.StartInfo.Arguments = "/x {XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}";
             p.Start();

结果是一条错误消息:

  

“该操作仅对当前安装的产品有效”

该产品随InstallShield试用版一起安装。如果我使用Limited InstallShield安装产品,卸载过程将完美执行。


这个问题是因为它是评估版本,还是我遗漏了其他内容?

2 个答案:

答案 0 :(得分:0)

如果产品的GUID在InstallShield版本之间发生了变化(如果你让它创建一个默认的GUID很可能),那么它可能正在寻找要卸载的注册表中的旧GUID。您可能需要手动清理旧的注册表项。有关于here的信息。

答案 1 :(得分:0)

杰夫指出,你很可能得到了错误的GUID。您可以在此答案中找到几种方法来找到有关如何卸载MSI的正确方法:MSI uninstall details。或者更好的是,直接回答有关如何为您的设置找到产品GUID的答案:How can I find the product GUID of an installed MSI setup?

我还尝试在代码中构建命令行,将其序列化为字符串,然后在命令窗口中使用 msiexec.exe 手动尝试验证其有效性。它是一个复杂的,容易出错的命令行界面。您的错误消息表明错误的GUID。

最后:您可以使用 DFT - Deployment Tools Foundation ,而不是将msiexec.exe作为命令行调用,它是Win32 Windows Installer API的.NET包装器。没有要构建的命令行或要检查的错误代码,只是易于使用.NET类来处理MSI的所有方面。这将允许您通过支持正确异常处理的代码运行卸载。 DTF作为Wix的一部分分发,如here所述。请参阅serverfault.com(系统管理员站点)上的this post,以便更好地了解不同的方法。并查看示例C#代码段,以便在MSI uninstall details中使用它。