Nous avons obtenu une action personnalisée qui exécute la ligne de commande pour fonctionner comme telle:
<CustomAction Id="OurAction"
FileKey="OurInstalledExe.exe"
ExeCommand="our command line args"
Execute="deferred"
Return="check" />
Le problème est que l'utilisateur voit une fenêtre contextuelle de la console lorsque la commande est exécutée.
La ligne de commande nécessite une élévation UAC, mais ne nécessite aucune interaction de l'utilisateur. Nous installons également le fichier avec le programme d'installation, l'action personnalisée s'exécute après = "InstallFiles".
Comment pouvons-nous empêcher l'utilisateur de voir la console?
Notez que si vous avez besoin d'une élévation UAC, vous devez vous assurer qu'il s'agit d'une autorité de certification à exécution différée. Voici l'exemple du manuel avec les arguments de ligne de commande ajoutés.
<CustomAction Id="QtExecDeferredExampleWithProperty_Cmd" Property="QtExecDeferredExampleWithProperty"
Value=""[#MyExecutable.exe]" /arguments" Execute="immediate"/>
<CustomAction Id="QtExecDeferredExampleWithProperty" BinaryKey="WixCA" DllEntry="CAQuietExec"
Execute="deferred" Return="check" Impersonate="no"/>
.
.
.
<InstallExecuteSequence>
<Custom Action="QtExecDeferredExampleWithProperty_Cmd" After="CostFinalize"/>
<Custom Action="QtExecDeferredExampleWithProperty" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>
Si vous avez le code source du fichier EXE, voici ce que vous pouvez faire. Créez le projet EXE Application Win32 projet au lieu de Application console .
Si vous ne pouvez pas modifier le code source du fichier EXE, vous pouvez le faire en:
Il existe un problème particulier entre un œuf et un œuf, puisqu'un exécutable doit être marqué en tant qu'application console avant de démarrer. Si vous voulez lancer un tel fichier exe sans que la console ne s'affiche, vous devez créer son processus avec le bons drapeaux. Si votre installateur ne peut pas les fournir, il est possible d’utiliser un troisième fichier .exe entre les deux. Par exemple, le programme d’installation Keybase lance ce petit utilitaire, appelé keybaserq.exe , afin d’exécuter des applications de console persistantes en arrière-plan, sans aucune fenêtre noire clignotante. C'est une source ouverte et vous pouvez voir comment le programme d'installation de Keybase s'en sert - pas de fenêtre de console clignotante.
Vous devez juste ajouter la deuxième commande "exit" pour cmd.exe
ExeCommand="[SystemFolder]cmd.exe /C start MyExe.exe & exit"
J'espère que ça vous aide