Ciao,
io avevo un problema simile, ovvero in un pacchetto di setup della mia applicazione dovevo eseguire delle funzionalità particolari, quindi diciamo avevo bisogno di scrivere codice .net puro.
Alla fine l'ho risolto "artigianalmente" ossia ho fatto una WindowsForm normale, dentro alla quale ovviamente ho potuto fare tutto il codice che mi serviva, ho gestito il wizard facendo corrispondere ogni passo ad una tab di un TabContainer (e quindi al next spostare il SelectedIndex della tabcontainer) ed ho nascosto le tab mettendoci sopra una label, in modo che l'utente clicchi solo "avanti/indietro" e non sulla tab.
Il codice è più o meno questo:
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
}
protected override void OnAfterInstall(IDictionary savedState)
{
base.OnAfterInstall(savedState);
//--- dopo l'installazione faccio le operazioni a mano e devo impostare un thread così
//--- perchè altrimenti i browserforfoder non vanno, ma dimmi te...
Thread thread = new Thread(new ThreadStart(Configura));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
private void Configura()
{
FormConfigurazione frm = new FormConfigurazione();
//--- la form mi scrive gli ini quindi devo dargli il path di installazione
frm.PathDestinazione = this.Context.Parameters["assemblypath"];
frm.Focus();
frm.ShowDialog();
....
la cosa poco elegante è che non è integrata nell'installer della mia applicazione, è una form che viene avviata sopra mentre quella di InstallShield rimane appesa sotto...però vedendo il grossisimo vantaggio che mi ha dato farmi quello che volevo dentro, ho valutato assolutamente trascurabile questa cosa...
Ciao.
Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo