Question

Dans un projet d'installation des fichiers exécutables tels que « .exe, .dll, .js, .vbs » sont acceptables, mais il n'y a pas moyen d'exécuter un fichier .bat dans une action personnalisée.

La question est de savoir comment exécuter les fichiers *.bat lors de l'installation?

Était-ce utile?

La solution

Eh bien, après beaucoup de recherches et de tâtonnements j'ai résolu ce. Je ne suis pas sûr que ce soit la meilleure façon, mais il fonctionne.

Voici le scénario: j'ai une application que je voudrais déployer via un projet d'installation de Visual Studio. En plus de mes fichiers d'application, je voudrais créer un sous-répertoire dans le répertoire cible qui contient un fichier batch (.bat). Je voudrais ce fichier pour exécuter à la fin du processus d'installation.

Voici ce que vous faites:

  1. Créer un projet d'installation et configurer comme vous le feriez normalement, y compris le sous-répertoire dans lequel vous placez votre fichier de commandes (vous pouvez simplement le placer dans le dossier d'application directement si vous ne voulez pas dans un sous-répertoire).
  2. Dans la vue "File System" (clic droit sur le projet dans la solution Explorer-> Affichage-> File System), ajoutez le fichier batch que vous voulez exécuter et cmd.exe (C : \ Windows \ System32 \ cmd.exe)
  3. Ouvrez la vue "Actions personnalisées" (clic droit sur le projet dans la solution Explorer-> Affichage-> Actions personnalisées)
  4. Cliquez avec le bouton droit sur "Commit" et choisissez "Ajouter une action personnalisée"
  5. Recherchez et sélectionnez cmd.exe.
  6. Ouvrez le panneau de propriétés pour la nouvelle action personnalisée.
  7. Supprimer / Engagez de la propriété Arguments.
  8. Entrez: /c "[TARGETDIR]subdirectoryname\batchfile.bat" dans la propriété Arguments, où subdirectoryname devrait être remplacé par le nom de votre sous-répertoire (si vous mettez le fichier de commandes dans un sous-répertoire comme je l'ai fait ... si vous ne l'avez pas , la valeur doit être /c "[TARGETDIR]batchfile.bat") et batchfile.bat doit être le nom de votre fichier batch.

Voilà. Le fichier de commandes va maintenant être exécutée une fois que le reste du processus d'installation est terminée.

Voici un exemple pour des raisons de clarté:

Mon fichier batch: blah.bat Mon sous-répertoire: monrep

La valeur des arguments pour mon action personnalisée cmd.exe ciblage serait alors

/c "[TARGETDIR]mydir\blah.bat"

L'espoir qui aide quelqu'un!

Autres conseils

  1. Vérifiez cet article (l'article est dépréciée), même si elle est en VB.NET il applique à C # ainsi. La partie la plus importante est (traduit en C #) la création d'une nouvelle bibliothèque de classes, et l'ajout d'une nouvelle installation de classe avec le contenu suivant: Comme indiqué dans l'article que vous pouvez créer une nouvelle action personnalisée avec une référence à votre projet vient d'être créé <. / p>

    override void Commit(IDictionary savedState)
    {
         base.Commit(savedState);
         System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
    }
    
  2. Maintenant, nous ajoutons fichier batch à votre projet d'installation. Créer un projet d'installation et configurer comme vous le feriez normalement, y compris le sous-répertoire dans lequel vous placez votre fichier de commandes (vous pouvez simplement le placer dans le dossier d'application directement si vous ne voulez pas dans un sous-répertoire).

  3. Dans la vue "File System" (clic droit sur le projet dans la solution Explorer-> Affichage-> File System), ajoutez le fichier batch que vous voulez exécuter.

  4. Générez le projet d'installation.

Une autre façon d'atteindre le même résultat est un fichier mis .vbs dans des actions personnalisées qui exécute le fichier .bat correspondant. Le code suivant est le « RunRegisterComponents.vbs » je mets dans le dossier de l'application de configuration. Bien sûr, je mets [TARGETDIR] comme paramètre dans .vbs fenêtre de propriétés Visual Studio.

dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Read the "CustomActionData" property holding the install directory.
dim programDir
programDir=  property("CustomActionData")

' Make the batch full file name and parameter
commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) &
programDir& chr(34)

' Set the current directory
WshShell.CurrentDirectory = programDir

' Run batch.
ret = WshShell.Run (commandString, 0, 0)

C'est comme je l'ai mis mes actions personnalisées:

entrer image description ici

J'espère que cela peut vous aider!

Si vous essayez d'exécuter un fichier batch qui ont des chemins relatifs au cours du processus d'installation, qui échouera à coup sûr. En effet, le fichier batch prendra en compte le répertoire dans lequel le programme d'installation est en cours d'exécution, et non où les fichiers étaient en cours d'installation. Utilisez les constructeurs d'installation qui copie des fichiers batch dans le répertoire temporaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top