Puoi creare i progetti di installazione direttamente da vs sotto "installazione e distribuzione".

Puoi personalizzare l'installazione come vuoi andando a fare l'overload dei metodi Install, OnAfterInstall, ecc...

Per farlo crei una classe installer (in un progetto esterno a quello di setup) e la agganci al tuo progetto di installazione come custom action:

codice:
[RunInstaller(true)]
public class Install : Installer

protected override void OnAfterInstall(IDictionary savedState)
    {
        string lang = Context.Parameters["lang"];
        RegistryKey key = Registry.LocalMachine;
        using (key = key.CreateSubKey(@"SOFTWARE\MyApp\"))
        {
            key.SetValue("lang", lang);
            key.Close();
        }
        base.OnAfterInstall(savedState);
    }
a questo punto, come vedi da sopra, puoi andare a scrivere nel registro durante l'installazione, copiare file nelle cartelle, aprire messagge box di input all'utente e puoi personalizzare l'installazione a "piacimento" agendo sulle custom action.

Puoi partire da qua:

http://msdn.microsoft.com/en-us/libr...code-snippet-2