Как запустить проект InstallScript из консольного приложения

Я создал серьезное обновление (Installscript msi), которое отлично работает при выполнении, нажав на исполняемый файл.

Я также создаю консольное приложение, которое запускает тот же exe-файл, но на этот раз после установки, наряду с новой версией, предыдущая версия отображается в списке добавления / удаления программ.

все компоненты устанавливаются правильно, но

Почему предыдущая версия отображается только при запуске exe из консольного приложения?

// Enter the executable to run, including the complete path
start.FileName = @"folder1\MyISProj.exe";
// Do you want to show a console window?
start.CreateNoWindow = true;
start.WindowStyle = ProcessWindowStyle.Minimized;

start.UseShellExecute = false;
start.RedirectStandardOutput = true;

// Run the external process & wait for it to finish
using (Process proc = Process.Start(start))
{
   //proc.WaitForExit();
    proc.Close();
}

Еще одна вещь, которую я заметил, - когда я вызываю exe из консольного приложения, установщик открывается, и после принятия EULA и т. Д., Когда начинается фактическая установка, консольное приложение вызывается снова. Чтобы остановить это, я добавил проверку в методе Main, чтобы запускать консольное приложение только один раз. Теперь, когда установщик попытается снова запустить консольное приложение, он проверит, запущен ли уже процесс, и если да, он просто возвращается из консольного приложения.

Process[] result = Process.GetProcesses();

foreach (var item in result)
{
    if (item.ProcessName.Contains("MyISProj"))
    {

        Console.WriteLine("There is already a instance running.");
        System.Environment.Exit(0);
        return;
    }

}

Но после этого также добавить / удалить список программ показывает две записи. Что я должен сделать, чтобы решить эту проблему? Я застрял с этой проблемой.

Я использую InstallShield 2011 Professional Edition для создания EXE.

1 ответ

Здесь есть две проблемы. Во-первых, у вас нет действительного Основного обновления, о чем свидетельствуют две записи в "Установка и удаление программ". Вы изменили ProductCode, но запись таблицы Upgrade (как выполняется FindRelatedProducts и RemoveExistingProducts) не обнаруживает предыдущую установку и не удаляет ее как часть обновления. Существует ряд причин этого, которые можно найти в Google.

Во-вторых, автоматические установки InstallScript MSI - настоящая боль в задней части. Они требуют, чтобы вы сгенерировали файл ответов и затем запустили его. Это очень хрупкая и серьезная причина, по которой я предлагаю остаться с Basic MSI, который гораздо проще поддержать. ( msiexec /I foo.msi /qn REBOOT=R и проверьте код выхода 3010, указывающий, что перезагрузка была необходима и подавлена.)

Другие вопросы по тегам