Создание автоматического обновления приложения в C # - PullRequest
1 голос
/ 15 февраля 2012

У меня есть приложение для Windows (скажем, «Приложение A»), которое содержит некоторые службы Windows и форму окна.

Теперь я создаю другое приложение (назовите его «App B»), которое содержитслужба windows.Это проверит на моем сервере, доступна ли более новая версия «Приложения A» или нет.Если доступна более новая версия, будет

загрузить новую версию -> удалить «Приложение 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 Ответ

1 голос
/ 15 февраля 2012

Чтобы помочь разобраться, почему это происходит, я бы сделал 2 вещи, сначала изменив код удаления на:

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, там. Большую часть времени MSI необходимо будет повышать с помощью UAC на Windows Vista и выше при запуске, поэтому, если ваше приложение для обновления не работает от имени администратора, то это тихо завершится ошибкой.

Martyn

...