2015-10-06 11 views
0

Я создаю приложение, и я требую, чтобы в процессе установки приложение удалило некоторые другие установленные программы. Итак, что я сделал первым, это создать консольное приложение, которое удаляет программы и пока не будет работать, я добавляю это консольное приложение в качестве настраиваемых действий в настройке и создаю решение, но во время установки деинсталлятор не работает.Удаление приложений в процессе установки и развертывания

Извините за мой плохой английский :).

Я использую следующий код для удаления.

 string UninstallCommandString = "/x {0} /qn"; 
     Process process = new Process(); 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     process.StartInfo = startInfo; 

     startInfo.UseShellExecute = false; 
     startInfo.RedirectStandardError = true; 

     startInfo.FileName = "msiexec.exe"; 
     startInfo.Arguments = string.Format(UninstallCommandString, "{CCB85747-267D-45C6-AC32-7979ADFCD2D8}"); 
     process.Start(); 
     process.WaitForExit(); 

     string UninstallCommandString2 = "/x {0} /qn"; 
     Process process2 = new Process(); 
     ProcessStartInfo startInfo2 = new ProcessStartInfo(); 
     process2.StartInfo = startInfo2; 

     startInfo2.UseShellExecute = false; 
     startInfo2.RedirectStandardError = true; 

     startInfo2.FileName = "msiexec.exe"; 
     startInfo2.Arguments = string.Format(UninstallCommandString2, "{7A8A8C03-6BEA-45B4-BAD9-EBC5790A037A}"); 
     process2.Start(); 
     process2.WaitForExit(); 


     string UninstallCommandString3 = "/x {0} /qn"; 
     Process process3 = new Process(); 
     ProcessStartInfo startInfo3 = new ProcessStartInfo(); 
     process3.StartInfo = startInfo3; 

     startInfo3.UseShellExecute = false; 
     startInfo3.RedirectStandardError = true; 

     startInfo3.FileName = "msiexec.exe"; 
     startInfo3.Arguments = string.Format(UninstallCommandString3, "{6AFDD6D0-3F33-45F0-B058-677F2080AE22}"); 
     process3.Start(); 
     process3.WaitForExit(); 

     string UninstallCommandString4 = "/x {0} /qn"; 
     Process process4 = new Process(); 
     ProcessStartInfo startInfo4 = new ProcessStartInfo(); 
     process4.StartInfo = startInfo4; 

     startInfo4.UseShellExecute = false; 
     startInfo4.RedirectStandardError = true; 

     startInfo4.FileName = "msiexec.exe"; 
     startInfo4.Arguments = string.Format(UninstallCommandString4, "{ACC5E4C6-B4D2-4227-B577-95D511C05A6E}"); 
     process4.Start(); 
     process4.WaitForExit(); 

ответ

0

Невозможно выполнить установку или удаление из пользовательского действия и особенно относится к проектам VS. Одновременно допускается только одна операция MSI.

Обычно вы делаете это с помощью основного обновления, это RemovePreviousVersions в проекте настройки VS, но VS не поддерживает ничего, кроме обновления текущего обновления UpgradeCode. Другой инструмент (например, Wix) позволит вам перечислить кучу кодов обновления, и ваша установка автоматически удалит связанные продукты.

Так что это зависит от ваших требований к рабочим потокам. Вы можете закрепить свою настройку в самораспаковывающемся exe, который запускал ваши удаленные файлы, а затем запустил setup.exe (если у вас есть предпосылки для установки) или просто установлен MSI. Или вы можете использовать инструмент редактора MSI (например, Orca) для добавления UpgradeCodes этих продуктов MSI в таблицу Upgrade вашего MSI, и вы создали обновление RemovePreviousVersions, после чего оно удалит их. Не так много ответа, но вы пытаетесь сделать то, что Windows Installer не поддерживает (операции MSI из пользовательского действия), а VS не поддерживает (обновления, удаляющие другие продукты).

+0

Да, спасибо за ответ, я добираюсь до этого момента, я получил решение и проще, чем я думал, есть два способа сделать это. 1. InstallShield Пользовательские действия после инициализации (перед диалогом): Если я запускаю свой код в этой части, отлично работает, потому что перед установкой проблема заключается в том, что она не работает для удаленного развертывания и тихих установок. 2. InstallShield Upgrade Paths: добавьте только файл программы .msi, который вы хотите удалить, и отлично работает! –