web-dev-qa-db-fra.com

Comment exécuter un fichier ".bat" lors de l'installation?

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

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

31
mammadalius

Eh bien, après de nombreuses recherches et essais et erreurs, j'ai résolu ce problème. Je ne sais pas si c'est la meilleure façon, mais ça marche.

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 que ce fichier s'exécute à la fin du processus d'installation.

Voici ce que vous faites:

  1. Créez un projet d'installation et configurez comme vous le feriez normalement, y compris le sous-répertoire dans lequel vous placerez votre fichier de commandes (vous pouvez simplement le placer directement dans le dossier d'application si vous ne le souhaitez pas dans un sous-répertoire).
  2. Dans la vue "Système de fichiers" (cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions-> Affichage-> Système de fichiers), ajoutez le fichier de commandes que vous souhaitez exécuter et cmd.exe (C:\Windows\System32\cmd.exe)
  3. Ouvrez la vue "Actions personnalisées" (faites un clic droit sur le projet dans l'Explorateur de solutions-> Affichage-> Actions personnalisées)
  4. Faites un clic droit sur "Valider" et choisissez "Ajouter une action personnalisée"
  5. Accédez à et sélectionnez cmd.exe.
  6. Ouvrez le panneau des propriétés de l'action personnalisée nouvellement créée.
  7. Supprimer/valider de la propriété Arguments.
  8. Entrer: /c "[TARGETDIR]subdirectoryname\batchfile.bat" dans la propriété Arguments, où sous-répertoire doit être remplacé par le nom de votre sous-répertoire (si vous placez le fichier de commandes dans un sous-répertoire comme je l'ai fait ... si vous ne l'avez pas fait, la valeur doit être /c "[TARGETDIR]batchfile.bat") et batchfile.bat doivent être le nom de fichier de votre fichier de commandes.

C'est tout. Le fichier de commandes sera désormais exécuté une fois le reste du processus d'installation terminé.

Voici un exemple pour plus de clarté:

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

La valeur des arguments de mon action personnalisée ciblant cmd.exe serait alors

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

J'espère que cela aide quelqu'un!

59
Brian Mulcahy

Une autre façon d'atteindre le même résultat consiste à placer un fichier .vbs dans des actions personnalisées qui exécutent le fichier .bat correspondant. Le code suivant est le "RunRegisterComponents.vbs" que j'ai mis dans le dossier d'application d'installation. Bien sûr, j'ai mis [TARGETDIR] comme paramètre .vbs dans la fenêtre de propriétés de 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 j'ai défini mes actions personnalisées:

enter image description here

J'espère que cela pourra vous aider!

5
Massimo
  1. Consultez cet article (l'article est obsolète), même s'il se trouve dans VB.NET, il s'applique également à C #. La partie la plus importante est (traduite en C #) la création d'une nouvelle bibliothèque de classes et l'ajout d'une nouvelle classe d'installation avec le contenu suivant: Comme indiqué dans l'article, vous pouvez ensuite créer une nouvelle action personnalisée avec une référence à votre projet que vous venez de créer.

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

  3. Dans la vue "Système de fichiers" (cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions-> Affichage-> Système de fichiers), ajoutez le fichier de commandes que vous souhaitez exécuter.

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

5
Y P

Si vous essayez d'exécuter un fichier de commandes qui ont des chemins d'accès relatifs pendant le processus d'installation, cela échouera à coup sûr. En effet, le fichier de commandes prendra en compte le répertoire dans lequel le programme d'installation s'exécute, et non l'emplacement d'installation des fichiers. Utilisez des générateurs d'installation qui copient les fichiers de commandes dans un répertoire temporaire.

0
gomugomuno