在C#中创建自动应用程序更新程序

时间:2012-02-15 07:32:02

标签: c# winforms windows-services auto-update

我有一个Windows应用程序(比如它" App A"),它包含一些Windows服务和一个窗口表单。

现在我正在创建另一个包含Windows服务的应用程序(名称为" App B")。这将检查我的服务器是否有更新版本的" App A"可用与否。如果有更新的版本,它将

下载新版本 - >卸载" App A" - >安装新版本

对于卸载我使用此代码:

private void uninstall()
    {
        Process p = new Process();
        p.StartInfo.FileName = "C:\\WINDOWS\\system32\\msiexec.exe";
        p.StartInfo.Arguments = "/x \"c:\\AppA.msi\" /qn";
        p.Start();
        p.WaitForExit();
    }

安装我正在使用此代码:

private void install()
    {
        Process p = new Process();
        p.StartInfo.FileName = "C:\\WINDOWS\\system32\\msiexec.exe";
        p.StartInfo.Arguments = "/i \"c:\\AppA.msi\" /qn";
        p.Start();
        p.WaitForExit();
    }

但此代码无法正常运行,并且未卸载应用程序。

如果我做错了,请告诉我。它非常紧急。

1 个答案:

答案 0 :(得分:1)

为了帮助解决为什么会发生这种情况,我会做两件事,首先将卸载代码更改为:

private void uninstall()
{
    Process p = new Process();
        p.StartInfo.FileName = @"C:\WINDOWS\system32\msiexec.exe";
        p.StartInfo.Arguments = @"C:\Windows\System32\MSIEXEC.EXE /l* ""AppAUninstall.log"" /q /norestart /x""C:\MyApp.msi""";
        p.Start();
        p.WaitForExit();
}

此代码将保留一个名为AppAUninstall.log的文件,该文件将告诉您msi卸载的输出,这可能有关于它为什么不卸载的信息

另外,你有一个安静的参数/ q。大多数情况下,在运行时需要在Windows Vista及更高版本上使用UAC升级MSI,因此如果您的更新程序应用程序未以管理员身份运行,那么这将悄然失败。

马丁