2009-04-21 5 views
1

J'essaye de modifier une ancienne application Delphi 5 pour qu'elle puisse être lancée à partir de son icône/via l'explorateur, ou à partir de la console (commande- ligne). Quand il est lancé à partir de la console, je veux que le programme se détache du processus de la console, afin que la console puisse continuer à exécuter d'autres instructions sans attendre que mon programme se termine.lancer un programme gui à partir de la console windows et le faire se détacher

Je veux l'utiliser dans un fichier 'batch', tel que j'aurais pu;

 
@echo off 
rem step 1 - do some stuff here 
rem 
rem step 2 - launch my app 
c:\myfolder\myapp 
rem 
rem step 3 - do some more stuff here 

et que le processus de la console passe à l'étape 3 directement après le lancement de mon application à l'étape 2.

Je suis sûr que je l'ai déjà fait, il y a plusieurs années, mais je suis perplexe quant à ce que j'ai fait exactement. Je ne veux pas écrire une minuscule 'application de console' pour mon application Windows principale - je suis sûr à 95% qu'il y avait un moyen de le faire dans une application 'normale' de l'interface graphique Delphi. Je suppose que je pourrais utiliser vbscript ou powershell ou quelque chose pour 'exécuter' mon programme avec un certain type de paramètre 'nowait' mais le client est familier avec les fichiers batch et je ne veux pas vraiment déranger l'applecart en suggérant qu'il changez ses scripts ou installez des trucs supplémentaires - je fais des changements à l'exécutable de toute façon et ce serait bien de cocher cette case pour lui aussi.

Quelqu'un? :-)

Répondre

14

Je pense que la commande START est celle que vous cherchez. Il démarre un processus séparément de la console et fait partie de cmd.exe donc aucun logiciel supplémentaire requis.

Mais j'étais d'avis que les applications GUI l'ont fait de toute façon. Peut-être que Delphi est différent de MSVC.

Ouvrez une console et tapez "start /?".

En tant que itowlson états dans les commentaires, l'application GUI se détachent généralement eux-mêmes. C'est la véritable coquille cmd.exe qui fait de la ruse en ce qu'elle attend qu'elle se termine si elle s'exécute à partir d'un fichier cmd.

Donc, "notepad" à partir de l'invite va démarrer en arrière-plan, mais "notepad" dans un fichier cmd attendra. Dans le fichier cmd, vous devez utiliser:

start notepad.exe 

ou quel que soit votre application est appelée (pas le bloc-notes, sans doute).

+5

des applications GUI font de toute façon * si vous les lancer à partir de la console *. Mais si vous lancez une application graphique à partir d'un fichier de commandes, le fichier de commandes attend que l'application graphique se termine. Par exemple. essayez de créer un fichier batch qui démarre juste le Bloc-notes. C'est un fichier batch vs. interactif, pas Delphi vs MSVC. Et oui, c'est un peu * non-intuitif * sourire. – itowlson

+0

Je ne savais pas que c'était de la ruse de cmd.exe, merci, itowlson. J'ai eu des problèmes avec cela avant d'automatiser mon travail VM à la maison pour démarrer automatiquement VPN, Notes, firewalls et ainsi de suite. Je saurai mieux la prochaine fois. Incorporé vos commentaires dans la réponse. – paxdiablo

+0

Merci les gars - bonne réponse, très utile. – robsoft

5

essayer: start "" c: \ MonDossier \ myapp (avec les guillemets vides)

+1

Merci pour la réponse - mais le bit des citations vides semble être où vous pouvez donner un «titre» au programme. Vous n'avez pas vraiment * besoin * d'eux, il semble (à partir de la lecture sur la syntaxe de démarrage à partir de divers google hits). – robsoft

+4

Si vous devez citer votre chemin exécutable, vous aurez besoin des guillemets vides (ou d'un titre à l'intérieur). Sinon, votre chemin sera traité comme le titre. – aphoria

+0

Ah, c'est logique. Merci pour la clarification! – robsoft

2

Je pense que Microsoft a été résoudre ce problème dans Windows PowerShell. Dans l'invite de commande, même si vous utilisez "démarrer", vous ne pouvez pas vraiment détacher votre processus de cmd. Si vous fermez le cmd, vous allez mourir, soudainement. Mais dans Windows Power Shell, vous pouvez détacher votre programme ou votre commande de Power Shell par défaut. Donc, si vous préférez utiliser Windows PowerShell au lieu de l'invite de commandes, faites juste ceci:

PS: X:\> <your command> 
0

est ici d'une façon que je l'ai trouvé.Il fonctionne très proprement et ne laisse pas de fenêtres cmd supplémentaires autour (la recommandation d'utiliser start c: \ MonDossier \ myappne fonctionne pas:

cmd /c dir && c:\myfolder\myapp 

Pour citer l'aide CMD:

/C  Carries out the command specified by string and then terminates 

Note that multiple commands separated by the command separator '&&' 
are accepted for string if surrounded by quotes. 

Apparemment, il remarque que les commande dir termine et les sorties, même si votre application a été lancée sur la même commande. craie jusqu'à l'un des caprices Windows.

-1

u devrait utiliser l'exemple de commande cd

cd/

cd myfolder

début myapp

sortie

+0

Vous avez posté 8 ans après la question a été posée, mais je ne vois pas de nouvelles informations de votre message – jeb

Questions connexes