MSI продолжает устанавливать старую версию, когда вызывается с тихим аргументом - PullRequest
1 голос
/ 22 сентября 2011

У меня очень неприятная проблема.

У меня есть приложение с проектом установки, включенным в решение, которое создает MSI-файл. Я использую VS 2008. Я увеличил версию проекта установки - выбрал проект в обозревателе решений, нажал клавишу F4 и увеличил версию и изменил поля «Производитель» и «Автор». Затем я затем перестроил приложение и проект установки.

Затем происходит самое странное: когда я запускаю полученный MSI-файл без вывода сообщений, он устанавливает последнюю версию в правильном пути C: \ Program Files (x86) [Manufacturer] \ path.

Но когда я вызываю установочный файл из кода приложения, с немыми аргументами:

processStartInfo.Arguments = "/i " + "\"" + file + "\"" + "/qn";

... затем он устанавливает предыдущую версию (ту, которая была увеличена до версии проекта установки), а также устанавливает ее по старому пути производителя.

В установочном файле .msi хранятся две версии, которые содержат разные переменные / установочные свойства ?! Я озадачен и очень раздражен, я потерял четыре часа на этом вопросе. Я удалил временные файлы. Я проверил правильный .msi находится на правильном пути в десятки раз.

Мне нужно заставить .msi учитывать обновленные параметры настройки при установке с параметром без вывода сообщений.

Вот код из приложения, которое вызывает настройку:

    private static void RunSetupFile()
    {
        string file = Path.Combine(Utils.GetAppTempPath(), Utils.ApplicationUpdate_SetupFileName);
        ProcessStartInfo psi = new ProcessStartInfo(Path.Combine(Environment.SystemDirectory, "msiexec.exe"));
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        psi.Arguments = "/i " + "\"" + file + "\"" + "/qn"; 
        psi.UseShellExecute = true;
        psi.Verb = "runas";
        try
        {
            Process process = Process.Start(psi);
        }
        catch (System.ComponentModel.Win32Exception)
        {
        }
    }

А ниже приведен код, который вызывает вышеуказанный метод, возможно, здесь виновник:

    public static void InitializeAppUpdate()
    {
        DownloadNewSetupVersionFromServer();
        RunSetupFile();
        Utils.CloseApplication();
    }

Спасибо за любую идею. Дайте мне знать, если я предоставлю более подробную информацию.

1 Ответ

2 голосов
/ 22 сентября 2011

Лог выглядит нормально, и я уверен, что проблема не в пакете.

Единственные причины, о которых я могу думать, - это неправильный путь или неправильный файл MSI. Исходя из вашего кода, я предполагаю, что вы пытаетесь обработать какое-то обновление, возможно, с помощью загруженного файла MSI.

Попробуйте отладить приложение, чтобы увидеть, какой путь хранится в переменной file . Прямо перед выполнением Process.Start перейдите по этому пути и проверьте MSI:

  • открыть его с помощью Orca
  • выбрать таблицу свойств
  • проверить свойства производителя и ProductVersion

Возможно, это старый файл MSI, а не новый. Если это не так, попробуйте запустить командную строку вручную с / qn и без него прямо перед Process.Start.

...