web-dev-qa-db-fra.com

WiX - CustomAction ExeCommand - Console masquée

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?

24
jonathanpeppers

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="&quot;[#MyExecutable.exe]&quot; /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>
6
saschabeaumont

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:

  1. Création d'une DLL CustomAction
  2. Appel d'une CustomAction dans DLL (à partir de WiX) pour exécuter le processus en masquant la fenêtre de la console.
2
SysAdmin

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.

0
Steve

Vous devez juste ajouter la deuxième commande "exit" pour cmd.exe

ExeCommand="[SystemFolder]cmd.exe /C start MyExe.exe &amp; exit"

J'espère que ça vous aide

0
Anton Sivov