2009-10-26 5 views
0

J'ai un projet d'installation avec une classe d'installateur personnalisée qui lance l'application à la fin de l'installation. Dans la configuration, je crée un raccourci vers la sortie de l'application. L'installation se passe bien. Mais quand je clique sur le raccourci, le programme d'installation redémarre et le lancement de l'application en même temps? Pourquoi?Problème avec le raccourci dans le projet d'installation C#

Non, le code de ma classe personnalisée est:

/// <summary> 
/// Installer class to automatically launch the application at the end of the installation/ 
/// </summary> 
[RunInstaller(true)] 
public partial class InstallerStartApplication : Installer 
{ 
    /// <summary> 
    /// Initializes a new instance of the <see cref="InstallerStartApplication"/> class. 
    /// </summary> 
    public InstallerStartApplication() 
    {    
     InitializeComponent();    
    } 

    /// <summary> 
    /// Raises the <see cref="E:System.Configuration.Install.Installer.AfterInstall"/> event. 
    /// </summary> 
    /// <param name="savedState">An <see cref="T:System.Collections.IDictionary"/> that contains the state of the computer after all the installers contained in the <see cref="P:System.Configuration.Install.Installer.Installers"/> property have completed their installations.</param> 
    protected override void OnAfterInstall(IDictionary savedState) 
    { 
     base.OnAfterInstall(savedState); 


    } 

    // Override the 'Install' method. 
    public override void Install(IDictionary savedState) 
    { 
     base.Install(savedState); 
    } 

    // Override the 'Commit' method. 
    public override void Commit(IDictionary savedState) 
    {   
     base.Commit(savedState); 

     try 
     { 
      Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); 
      Process.Start(Path.Combine(Directory.GetCurrentDirectory(), "IERssNotificator.exe"), "-c"); 
     } 
     catch (Exception ex) 
     { 
      Debug.WriteLine(ex); 
     } 
    } 

    // Override the 'Rollback' method. 
    public override void Rollback(IDictionary savedState) 
    { 
     base.Rollback(savedState); 
    } 


} 

Je lance cela à l'installation et engager une action personnalisée.

Répondre

1

ok, j'ai trouvé le problème. L'erreur est dans le code de la classe d'installation personnalisée:

Process.Start(Path.Combine(Directory.GetCurrentDirectory(), "IERssNotificator.exe"), "-c"); 

Ce lancement d'un processus, pas asynchrone et la configuration sans fin. C'est pourquoi il redémarre toujours l'installation.

Je change mon code et lance le processus dans un thread séparé et ainsi la configuration terminée.

1

Le projet d'installation place un type spécial de raccourci. Il ne lance pas simplement votre programme. Il vérifie d'abord que tous les fichiers installés avec le programme sont présents. Si c'est le cas, il lance le programme, si le programme d'installation n'est pas exécuté à nouveau à partir du cache msi pour réinstaller les fichiers manquants.

Avez-vous des actions de post-installation qui suppriment certains des fichiers installés?

+0

Non, voir mon code ... Ci-dessus – Coolweb

+0

Est-il possible de créer un raccourci * normal * au lieu du type qui déclenche un programme d'installation? –

+0

Je ne l'ai pas trouvé. À la fin, j'ai créé un raccourci dans l'action Commit en utilisant WinAPI. Vous pouvez utiliser WScript.Shell ou http://www.msjogren.net/dotnet/eng/samples/dotnet_shelllink.asp bibliothèque –

Questions connexes