запустить программу с графическим интерфейсом из консоли Windows, а затем заставить ее «отсоединить» себя - PullRequest
1 голос
/ 21 апреля 2009

Я пытаюсь изменить устаревшее приложение Delphi 5, чтобы оно могло запускаться либо из его значка / через проводник, либо из консоли (командной строки). Когда он запускается из консоли, я хочу, чтобы программа отсоединилась от процесса консоли, чтобы консоль могла продолжать выполнять другие инструкции, не дожидаясь завершения моей программы.

Я хочу использовать его в «пакетном» файле, который у меня может быть;

@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

и что процесс консоли переходит к шагу 3 сразу после запуска моего приложения на шаге 2.

Я уверен, что делал это раньше, много лет назад, но я озадачен тем, что именно я сделал. Я не хочу писать крошечное консольное приложение «launcher» для моего основного приложения Windows - я на 95% уверен, что был способ сделать это в «нормальном» Delphi GUI-приложении.

Полагаю, я мог бы использовать vbscript или powershell или что-то еще, чтобы «выполнить» мою программу с каким-то параметром «nowait», но клиент знаком с пакетными файлами, и я не хочу расстраивать яблочную корзину, предлагая ему изменить его сценарии или установка дополнительных вещей - я в любом случае делаю изменения в исполняемом файле, и было бы здорово отметить этот флажок для него тоже.

Кто-нибудь? :-)

Ответы [ 5 ]

14 голосов
/ 21 апреля 2009

Я думаю, что команда START - это та, которую вы ищете. Он запускает процесс отдельно от консоли и является частью cmd.exe, поэтому дополнительное программное обеспечение не требуется.

Но я придерживался мнения, что приложения с графическим интерфейсом сделали это в любом случае. Возможно, Delphi отличается от MSVC.

Откройте консоль и введите "start /?".

Как отмечается в комментариях itowlson, приложение с графическим интерфейсом обычно отключается. Это настоящая оболочка cmd.exe, которая делает хитрость, ожидая завершения, если она запускается из файла cmd.

Так что "notepad" из приглашения запустит его в фоновом режиме, но "notepad" в файле cmd будет ждать. В файле cmd вам необходимо использовать:

start notepad.exe

или как называется ваше приложение (предположительно, не блокнот).

5 голосов
/ 21 апреля 2009

try: start "" c: \ myfolder \ myapp (с пустыми кавычками)

2 голосов
/ 23 октября 2012

Я думаю, что Microsoft решила эту проблему в Windows Power Shell. В командной строке, даже если вы используете «start», вы не можете отсоединить ваш процесс от cmd. Если вы закроете cmd, вы внезапно умрете. Но в Windows Power Shell вы можете отключить вашу программу или команду от Power Shell по умолчанию. Итак, если вы предпочитаете использовать Windows Power Shell вместо командной строки, просто сделайте следующее:

PS: X:\> <your command>
0 голосов
/ 09 января 2018

вы должны использовать пример команды cd

Кд /

cd myfolder

Запустите myapp

выход

0 голосов
/ 18 января 2016

Вот один способ, который я нашел. Он работает довольно чисто и не оставляет лишних cmd окон (рекомендация использовать start c: \ myfolder \ myapp не работает :

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

Цитировать справку 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.

Очевидно, он замечает, что команда dir завершается и завершается, даже если ваше приложение было запущено по той же команде. Поговорите с одним из капризов Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...