从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口
Posted
技术标签:
【中文标题】从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口【英文标题】:Create a new cmd.exe window from within another cmd.exe prompt 【发布时间】:2022-01-20 00:52:03 【问题描述】:我正在设置 CruiseControl.NET。我遇到的问题是我将 CC 作为控制台应用程序运行,当我的构建成功完成并执行(使用 exec)时,它会在 CruiseControl DOS 提示符下启动它。我只是使用简单的批处理文件来启动我的应用程序,但让它在与 CC 相同的提示符下运行导致 CC 认为只要我的应用程序运行,构建就会继续。
cmd.exe
的命令行参数是否会生成另一个单独的提示窗口?
【问题讨论】:
cmd.exe 是 CUI shell,而不是 GUI。它不会创建窗口。它使用由控制台主机进程 conhost.exe 的实例创建和管理的控制台窗口。如果 CUI 程序正常启动,则基本客户端 DLL(kernel32.dll 或 kernelbase.dll)中的初始化代码会继承父控制台(如果有)或分配新控制台,除非它以创建标志DETACHED_PROCESS
启动(即没有控制台)。如果它以创建标志 CREATE_NEW_CONSOLE
开始(正如 CMD 的 start
使用的那样),则基本 DLL 总是分配一个新的控制台,而不是继承父级的。
【参考方案1】:
我认为这可行:
start cmd.exe
【讨论】:
确保你检查了所有不同的启动选项“开始/?” /wait 和 /I 可以派上用场。 fwiw,您甚至不必在启动后放置“cmd.exe”。只要“开始”这个词就可以了。 start /d这是您需要的代码:
start cmd.exe @cmd /k "Command"
【讨论】:
@cmd
在做什么?有相关文档吗?
@
抑制直接输出,通常会显示在提示符中,但命令仍会执行。
我用过这个,它可以工作,但是如果尝试通过键盘中断ctrl+c杀死正在运行的程序,运行程序不会停止。它只会在您关闭新打开的命令提示符窗口时停止。
不适用于使用^
的多行命令。 :( 有什么办法解决这个问题?【参考方案3】:
只需在命令提示符中输入start
:
start
这将打开新的cmd
窗口。
【讨论】:
【参考方案4】:start cmd.exe
打开一个单独的窗口
start file.cmd
打开批处理文件并在另一个命令提示符中执行它
【讨论】:
【参考方案5】:您可以在命令提示符下键入以下 3 个命令:
start
start cmd
start cmd.exe
【讨论】:
【参考方案6】:START "notepad.exe"
echo Will launch the notepad.exe application
PAUSE
要制作任何 cmd 文件类型,只需将内容保存为 .bat,即
@echo
TITLE example.bat
PAUSE
taskkill/IM cmd.exe
将其制作成“example.bat”文件,保存,然后打开并运行。
【讨论】:
【参考方案7】:简单的写入你的bat文件
@cmd
或
@cmd /k "command1&command2"
【讨论】:
感谢&
在新提示中执行多个命令。我喜欢添加exit
,以便在命令运行完成后关闭提示。【参考方案8】:
如果我们简单地使用start
命令或start cmd.exe
它会打开cmd。
如果要打开同一个命令提示符窗口;
start "Command Prompt"
【讨论】:
【参考方案9】:我还尝试在 CCNET 任务结束时执行运行守护进程/服务器的批处理文件; 使 CruiseControl 生成一个独立的异步进程而不等待进程结束的唯一方法是:
-
创建一个批处理文件来运行守护进程(服务器应用程序)
使用任务调度程序将批处理文件作为 CCNET 任务运行(使用 schtasks.exe)
schtasks.exe /create /F /SC once /ST 08:50 /TN TaskName /TR "c:/path/to/batchFileName.bat"
08:50 是 HH:MM 时间格式
你可能需要在启动 ccnet 时终止进程
PS:使用“start cmd.exe”选择的答案不起作用;确实生成了一个新的命令提示符,但 CCNET 将等待生成的 cmd 完成。
【讨论】:
以上是关于从另一个 cmd.exe 提示符中创建一个新的 cmd.exe 窗口的主要内容,如果未能解决你的问题,请参考以下文章
从另一个 UIViewController 的 .xib 文件在 ViewController.h 中创建 IBOutlets