0

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

Я также создаю консольное приложение, которое запускает тот же 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(); 
} 

Одна вещь, которую я наблюдал, что когда я называю ехе из консольного приложения инсталлятор откроется и после принятия лицензионного соглашения и т.д., при запуске фактической установки, то консольное приложение становится вызывается снова. Чтобы остановить это поведение, я добавил проверку в метод 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 для создания exe.

ответ

0

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

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

+0

MsiGetProperty (ISMSI_HANDLE, «ISACTIONPROP1», szOldProductValue, nProSize); возвращает предыдущий код продукта. Он работает нормально, когда я выполняю «exe», нажимая на него, но проблема возникает, когда я запускаю тот же exe из консольного приложения. Шахта не является тихой установкой. Я просто вызываю exe, как показано в коде. Это exe not msi, поэтому я не могу использовать msiexec. – PSR

Смежные вопросы