У меня есть настраиваемое действие, которое должно выполняться во время части установки .msi. У меня есть предыдущая версия, которая была установлена с помощью InstallShield (которая была излишней) и хотела перейти на более простой VS Setup Proj, потому что мне не требуется весь контроль, который предоставляет .isproj. Тем не менее, прямая установка с моей новой .msi, кажется, устанавливается рядом с предыдущей версией. Вот что я узнал до сих пор:
- У меня есть идентификатор продукта
- Я написал код, который удалит предыдущую версию путем создания процесса, использующего MsiExec.exe (код будет следовать)
- Попытка реализовать настраиваемое действие для удаления во время установки, но, похоже, одновременно можно запустить только один экземпляр MsiExec.exe.
- Был на этом посту (/128488/proekt-ustanovki-vs-udalit-drugoi-komponent-pri-ustanovke),, который не помог.
Код пользовательского действия:
//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, доступные для меня, если есть новая опция, которая работает.
Любая помощь приветствуется.