4

Je n'arrive pas à faire fonctionner une action personnalisée. Je peux faire cela mal. Voici ce que j'essaie de faire:Projet d'installation de Visual Studio 2008 - Les actions personnalisées ne se déclenchent pas

Je voudrais exécuter une action personnalisée dans mon installation d'application (projet Visual Studio Installer) qui exécute un exécutable. L'exécutable fait simplement des tâches de filtrage de fichiers system.io, et j'ai confirmé que l'exécutable lorsqu'il fonctionne seul fonctionne parfaitement.

  1. J'ai créé le projet d'installation
  2. a ajouté le fichier EXE dans le dossier de l'application
  3. est allé à des actions personnalisées et a ajouté l'exe à l'étape de validation
  4. InstallerClass est définie sur true
  5. courais le programme d'installation , n'a pas eu le résultat que j'espérais. J'ai donc ajouté une ligne pour écrire dans le journal de Windows. Regardé dans le journal Windows après avoir exécuté le programme d'installation à nouveau et il semblait qu'il ne fonctionnait pas. Ajout d'un debug.break au code exe Unisntalled/réinstallé mon installateur et rien ne s'est passé. Je me suis finalement assis et ai regardé les processus et ai confirmé que l'exe n'est jamais exécuté.

Des pensées?

systèmes ciblés: Windows XP, Vista Version Visual Studio: 2008 Sp1 Langue: VB.NET Cadre ciblé: 2,0


excellent. Je pense que je me rapproche du code que vous avez posté. Je l'ai converti en VB et je reçois cette erreur: Impossible de trouver myexename.savedstate. Je suppose que je suis supposé passer quelque chose aux sous-marins que vous avez postés mais je ne sais pas quoi. (Par la façon dont cela est une application console) j'ai ajouté une référence à la System.Configuration.Install.dll et voici mon code:

 

Imports System.ComponentModel 
Imports System.Configuration.Install 

_ 
    Public Class ApplicationInstaller 
     Inherits Installer 
     Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary) 
      ' Do some work on commit 
      The_Sub_I_Want_To_Run() 
     End Sub 
     Public Overloads Overrides Sub Install(ByVal stateSaver As IDictionary) 
      ' Do some work on install 
     End Sub 
     Public Overloads Overrides Sub Uninstall(ByVal savedState As IDictionary) 
      ' Do some work on uninstall 
     End Sub 
    End Class 

Je n'ai pas appelé cela. Je n'ai jamais utilisé la classe Installer auparavant. Je pourrais faire quelque chose de très novice ici. Selon vos instructions, j'ai ajouté le code que j'ai collé ci-dessous dans l'exe que je veux exécuter lors de mon installation. J'ai ajouté l'exe à mon dossier d'application, puis l'ai ajouté à l'action personnalisée Commit. Maintenant, voici le code que j'ai maintenant dans la source de mon exe que je suis en train de courir:

 
    _ 
    Public Class ApplicationInstaller 
     Inherits Installer 
     Public Overloads Overrides Sub Commit(ByVal savedState As IDictionary) 
      ' Do some work on commit 
      The_Sub_I_Have_my_codein() 
      MyBase.Commit(savedState) 
     End Sub 
     Public Overloads Overrides Sub Install(ByVal stateSaver As IDictionary) 
      ' Do some work on install 

     End Sub 
     Public Overloads Overrides Sub Uninstall(ByVal savedState As IDictionary) 
      ' Do some work on uninstall 
     End Sub 
    End Class 
 

Hmmm ... Dans Propriétés du projet de l'exe je cliqué sur « Sign l'assemblée "et l'erreur est partie. Cependant, il semble que l'exe n'exécute pas le code que je veux.

+0

Le projet de déploiement de Visual Studio est nul et vous causera sans aucun doute des problèmes. Utilisez WiX à la place. – erikkallen

Répondre

8

L'exe ou d'une bibliothèque que vous ajoutez à l'étape de validation doit contenir une classe dérivant de Installer et marqué avec l'attribut RunInstaller comme suit:

[RunInstaller(true)] 
public class ApplicationInstaller : Installer 
{ 
    public override void Commit(IDictionary savedState) { 
     // Do some work on commit 
    } 
    public override void Install(IDictionary stateSaver) { 
     // Do some work on install 
    } 
    public override void Uninstall(IDictionary savedState) { 
     // Do some work on uninstall 
    } 
} 

Hope this helps.

+1

[RunInstaller (true)] est très important. – Amitd

2

Appelez-vous la méthode de base?

public override void Commit(IDictionary savedState) { 
    // Do some work on commit 
    base.Commit(savedState); 
} 
0

Définissez la propriété

InstallerClass
sur 'false'.

Questions connexes