我正在尝试修改传统的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他的脚本或安装其他东西 - 无论如何我正在对可执行文件进行更改,为他勾选这个框也很棒。
任何? :-)
答案 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
出口