Создайте новый проект, который вызывает ваши формы windows exe и добавьте в него класс установщика, или просто добавьте класс установщика в свой exe форм windows (вам придется изменить его тип вывода и немного его изменить, например,отсутствует метод Main (), или объект запуска не задан, и ваша форма вызывается изнутри действия установки)
Класс установщика должен выглядеть следующим образом:
[RunInstaller(true)]
public partial class Installer1 : System.Configuration.Install.Installer
{
public Installer1()
{
InitializeComponent();
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
// Do your magic here, call your form, do your thing...
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Rollback(IDictionary savedState)
{
// if something goes wrong, it's here you correct it and rollback the system to its previous state and undo what you already changed
base.Rollback(savedState);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
// Here you undo changes when you cancel
base.Uninstall(savedState);
}
}
Когда выПодготовьте ваш проект установщика, перейдите в настраиваемое действие проекта установки и добавьте основной вывод проекта установщика в «папки» установки, фиксации, отката и удаления.
Еще одна полезная вещь - это получить каталог, в который устанавливается ваше приложение, и передать его путь к классу установщика.Вы задаете для этого свойства CustomActionData своего пользовательского действия значение
/INSTALLDIR="[TARGETDIR]\"
, и в своем классе установщика вы получаете каталог, используя:
Context.Parameters["INSTALLDIR"]
РЕДАКТИРОВАТЬ: И установка будет отменена, если возникнет исключениевыбрасывается изнутри метода Install.Насколько я знаю, это единственный способ «отменить» вашу установку в середине.Вы должны создать исключение и выбросить его. Например, вот так:
If (SomethingWentWrong) throw new Exception("My exception description")
Конечно, если исключение было вызвано чем-то другим (я имею в виду, не добровольно «созданным» вами), откатШоуд также начать.Но если вы делаете какие-то пользовательские изменения, их нужно выбросить из метода установки установщика настраиваемого действия.
Извините, если я был слишком подробен, но я преодолел свой собственный набор проблем по этому поводу, поэтому я 'Я буду рад, если я могу помочь кому-то избежать этого:)