如何在不保持批处理文件打开的情况下在后台运行进程?


9

我有一个Windows服务(Bamboo集成服务器),该服务运行一个批处理文件作为该脚本的子进程(构建作业)。在该批处理文件中,我希望能够启动一个进程(我们称其为workerprocess.exe),并使该进程在后台运行。这很好,我用过:

start "title" /B workerprocess.exe

一切都很好。问题在于,这阻碍了构建作业的完成。这样批处理脚本就完成了,但是由于有workerprocess.exe子进程,服务(Bamboo)不知道它已经完成了:它仍在等待workerprocess.exe(并显示其输出)。

我已经查看了start命令的文档,但看不到任何可以满足我需要的内容。我看到了这个问题,但它也没有真正帮助-服务仍然最终等待过程完成。

因此,我总而言之:我应该如何从批处理脚本运行新进程,以使其完全分离,并且不会容纳任何等待该批处理脚本完成的事情。


1
您是否尝试了不带“ / B”参数的操作,以使其不会在同一命令窗口内启动进程?
2013年

@JoshR,那改变了一切。该服务不再从该进程接收输出,但仍被该服务阻止。
杰克·斯科特

Answers:


2

您是否尝试过“ 隐藏启动(HSTART)”?(费用$ 20)

我个人使用它来在隐藏窗口的情况下运行每小时的批处理作业。他们还提到可以将命令作为参数(或默认情况下,我假设是默认)异步运行。我不知道这会如何影响您在CPU,内存或磁盘上的争用...但是该软件还为您提供了等待一段时间才能执行操作的选项。


当我在2013年9月写下答案时,该产品是免费的。可悲的是,他们在收费。
太阳

3

可以使用任何方便的名称下载和保存所有链接的脚本。

1)IEXPRESS解决方案-作为参数仅接受命令及其参数。

用法示例:

call hidder.bat myBat.bat  myexe.exe
call myexe.exe

2)SCHTASKS-再次仅接受两个参数-命令和参数,还检查它是否以提升的权限启动,并在可能的情况下使用WEVTUTIL命令获取进程的PID。

用法示例:

call SCHPhidden.bat "cmd /c myBat.bat"  "argument"

3)'WScript.Shell'-脚本是'WScript.Shell'的完整包装,可以通过命令行选项设置所有可能的选项,它是jscript / batch的混合体,可以称为bat。

用法示例(有关更多信息,请使用'-h'打印帮助):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 

4)'Win32_ProcessStartup'-再次是完整的包装器,所有选项都可以通过命令行参数访问。这次是WSF / batch混合,其中包含一些Jscript和一些VBScript代码-但是它返回启动进程的PID。没有隐藏,可以使用某些选项,例如X / Y坐标。

用法示例(有关更多信息,请使用“ -h”打印帮助)。这将需要可执行文件/脚本的完整路径(如果不在%path%:)

call win32process.bat "notepad" -arguments "/A openFile.txt"  -showWindow 0 -title "notepad"

5)。NET解决方案。使用了大多数ProcessStartInfo选项(但是最后,我太累了,无法包含所有内容):

用法示例(有关更多信息,请使用'-h'打印帮助):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal

找不到链接
Rahil Wazir

@rahilwazir-编辑。
npocmaka

1
我尝试了一下-我认为需要清理所有细节。简单地看第一种方法:IExpress,链接是hidder.bat,上面的示例使用了其他方法。当我运行脚本时,它未能向我询问上面未提到的EXE。如果在github上有markdown,那可能没问题,但是没有。最终,运行它生成了一些.DDF文件,但没有其他....
JoeG 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.