Question

J'ai pas réussi à modifier un fichier Windows Installer MSI pour exécuter un fichier de commandes après la sortie primaire a été installé. Je l'ai cherché pour cela et trouvé de nombreuses suggestions, mais rien qui fonctionne.

Ajouter une action personnalisée
Les actions personnalisées ne peuvent être des fichiers exécutables. Un fichier batch n'est pas exécutable.

Créer un exécutable Windows Scripting Host qui exécute le fichier batch
Beaucoup de gens ont essayé de le faire, y compris sur SO , et personne n'a pu obtenir ce travail.

Utilisation WIX ou InstallShield
Je n'ai pas le temps ou le pouvoir de changer la technologie d'installation de l'entreprise.

Modifier la .msi avec Orca et ajouter une propriété personnalisée, puis une action personnalisée, puis modifier le InstallExecuteSequence, ...
Je l'ai essayé pendant des heures et ont seulement créé des installateurs qui jettent une erreur de système quand je les lance.
Était-ce utile?

La solution

Qu'est-ce que vous avez dit ci-dessus est incorrect:

  

Les actions personnalisées ne peuvent être exécutable   des dossiers. Un fichier batch n'est pas exécutable.

Actions personnalisées (même sans outils tels que InstallShield) peuvent être .EXE, VBScript, JScript ou DLL base. Si vous écrivez une DLL, vous pouvez écrire ce code que vous voulez appeler un fichier de commandes ou de faire des changements que vous voulez au système -. Il n'y a pas de limite

Mise à jour : un exemple qui a fonctionné pour moi: (entrée dans la table CustomAction)

Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>

Autres conseils

J'ai pu résoudre ce problème en créant un fichier EXE consistant essentiellement en:

System.Diagnostics.Process.Start(pathToBatchFile);

Ajout du fichier EXE dans le fichier MSI en cours d'exécution alors comme une action personnalisée.

Alors que la réponse proposée par "William Leara" est un très bon départ, j'ai trouvé une meilleure solution convient de mentionner.

Un autre avantage de cette méthode a est que vous pouvez mettre votre fichier de commandes dans l'application dossier d'installation plutôt que le dossier racine de C, mais nous utilisons des drapeaux spéciaux de reporter l'exécution à après FileCopy l'action, nous avons aussi utiliser noImpersonate pour avoir plus le privilège nécessaire pour faire fonctionner de Program Files

Quelques notes:

  1. Utilisez TARGETDIR au lieu de INSTALLDIR
  2. Assurez-vous de citer les chemins.

Ce sont mes deux actions personnalisées. Dans mon cas, je veux forcer natif processeur de commande pour fixer quelques entrées de registre ainsi je ne l'utilise pas COMSPEC .

Première action (type 50) effectue la commande dans la source avec des arguments d'entrée de cible, parce que le type est 50 + 1024 + 2048 à elle est action différée avec noImpersonate drapeau.

  • Action: FinalAction
  • Type: 3122
  • Source: NCOM
  • Cible: / c "[TARGETDIR] Fixup.bat"

Deuxième action définit NCOM bien immédiatement:

  • Action: FinalNativeSys
  • Type: 51
  • Source: NCOM
  • Cible: [WindowsFolder] System32 \ cmd.exe

Ensuite, vous devez ajouter ces actions à InstallExecuteSequence :

  • Action: FinalAction
  • Condition: pas installé
  • Séquence: 5002

Et celui-ci:

  • Action: FinalNativeSys
  • Condition:
  • Séquence: 5001

Notez que dans mon cas, je pourrais facilement modifier les actions à appeler import reg.exe Fixup.reg aussi. Enfin, on peut utiliser MSITRAN dans une version post pour automatiser la procédure.

Faire un EXE qui fait un fichier .bat temporaire pour passer au tout répertoire que vous voulez et CALL un autre fichier de chauve-souris qui fait ce que vous avez besoin.

Dites à l'action personnalisée à utiliser cette exe.

Le premier argument à un exe CPP est le chemin vers l'exe lui-même. Cela peut être utilisé pour vous orienter, et que l'information pourrait être utilisée dans la fabrication du .bat temporaire

Dans mon cas, j'ai ajouté « Actions personnalisées ».
Le dossier "Installer" choisissez "Ajouter une action personnalisée"
Choisissez cmd.exe (c: \ windows \ system32 \ cmd.exe)
Ensuite, dans les propriétés de modifier cmd.exe "Arguments" à
"/ Install / c C: \ MyApp.exe --exec-une-action"

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