У меня есть пользовательское действие, которое должно выполняться во время установки в настройке .msi. У меня есть предыдущая версия, которая была установлена с использованием InstallShield (который был слишком переполнен) и хотел перейти на более простой VS Setup Proj, потому что я не требую всех элементов управления, которые предоставляет .isproj. Тем не менее, установка прямой установки с моим новым .msi, похоже, устанавливается бок о бок с предыдущей версией. Вот что я узнал до сих пор:Удаление предыдущего компонента перед установкой нового с помощью проекта установки VS 2005
- У меня есть код продукта
- Я написал код, который будет деинсталлировать предыдущую версию через создание процесса, который использует MsiExec.exe (код будет следовать)
- Пробовал выполнить пользовательские действия для удаления во время установки, но кажется, что вы можете иметь только один экземпляр MsiExec.exe за один раз.
- Был на этом посту (http://stackoverflow.com/questions/197365/vs-setup-project-uninstall-other-component-on-install), который не помог.
код пользовательских действий:
//Exe used to uninstall
string fileName = "MsiExec.exe";
//Product ID of versions installed using InstallShield
string productID = "{DC625BCF-5E7B-4FEF-96DD-3CDBA7FC02C1}";
//Use /x for uninstall and use /qn to supress interface
ProcessStartInfo startInfo = new ProcessStartInfo(fileName, string.Format("/x{0}", productID));
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.UseShellExecute = false;
//Start process
Process uninstallProcess = Process.Start(startInfo);
//Wait until uninstall is complete
uninstallProcess.WaitForExit();
Моя надежда состоит в том, чтобы в конечном итоге развернуть свои .msi с помощью ClickOnce, так что я надеюсь на вариант, который впишется в опции развертывания. В настоящее время все написано в .NET 2.0 и VS 2005, но у меня есть .NET 4.0 и VS 2010 для меня, если есть новый вариант, который работает.
Любая помощь приветствуется.