Как запустить проект 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, указывающий, что перезагрузка была необходима и подавлена.)