从Windows控制台启动一个gui程序,然后让它“自行分离”

时间:2009-04-21 07:29:53

标签: delphi batch-file console

我正在尝试修改传统的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

并且在步骤2中启动我的应用程序后,控制台进程会继续进行到第3步。

很多年前,我确信我已经做过这件事了,但我很疑惑我到底做了什么。我不想为我的主Windows应用程序编写一个小的控制台应用程序'启动器' - 我95%确定在'普通'Delphi GUI应用程序中有这样做的方法。

我想我可以使用vbscript或powershell或某些东西用某种'nowait'参数“执行”我的程序,但客户端熟悉批处理文件,我真的不想通过建议他改变来扰乱applecart他的脚本或安装其他东西 - 无论如何我正在对可执行文件进行更改,为他勾选这个框也很棒。

任何? :-)

5 个答案:

答案 0 :(得分:14)

我认为START命令是您正在寻找的命令。它单独启动一个进程到控制台,它是cmd.exe的一部分,因此不需要额外的软件。

但我认为GUI应用程序无论如何都是这样做的。也许Delphi与MSVC不同。

打开控制台并输入"start /?"

在评论中,如itowlson所述,GUI应用程序通常会自行分离。这是真正的cmd.exe shell做的诡计,因为它等待它从cmd文件运行时完成。

因此,提示中的"notepad"将在后台启动,但cmd文件中的"notepad"将等待。在cmd文件中,您需要使用:

start notepad.exe

或者你的应用程序被叫什么(不是记事本,大概是)。

答案 1 :(得分:5)

尝试:启动“”c:\ myfolder \ myapp (带空引号)

答案 2 :(得分:2)

我认为微软已经在Windows Power Shell中解决了这个问题。 在命令提示符下,即使您使用“start”,也无法从cmd中分离您的进程。如果你关闭cmd,你会突然死亡。但在Windows Power Shell中,您可以默认从Power Shell分离程序或命令。 因此,如果您更喜欢使用Windows Power Shell而不是命令提示符,请执行以下操作:

PS: X:\> <your command>

答案 3 :(得分:0)

这是我找到的一种方式。它运行得非常干净,不会留下任何额外的 cmd 窗口(建议使用启动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变幻莫测的一个。

答案 4 :(得分:-1)

你应该使用cd命令示例

坎德拉/

cd myfolder

启动myapp

出口