Java 如何从windows服务调用批处理文件?

Java 如何从windows服务调用批处理文件?,java,batch-file,windows-services,Java,Batch File,Windows Services,我们有一个java应用程序,它作为windows服务运行。实际上,我们需要调用一个批处理文件来启动windows“计算器”应用程序。但我们不能。如果我们不将java应用程序作为windows服务启动,它就可以正常工作。我已经读了一篇关于这方面的文章,并完成了以下配置 “首先通过为批处理文件或exe文件提供适当路径来安装服务,然后转到运行->服务.msc->右键单击服务->属性->登录->选中启用服务以与桌面交互使其启用” 之后,我们获得了部分成功,因为它首先提示一个权限窗口,如下所示: 我可以建

我们有一个java应用程序,它作为windows服务运行。实际上,我们需要调用一个批处理文件来启动windows“计算器”应用程序。但我们不能。如果我们不将java应用程序作为windows服务启动,它就可以正常工作。我已经读了一篇关于这方面的文章,并完成了以下配置

“首先通过为批处理文件或exe文件提供适当路径来安装服务,然后转到运行->服务.msc->右键单击服务->属性->登录->选中启用服务以与桌面交互使其启用”

之后,我们获得了部分成功,因为它首先提示一个权限窗口,如下所示:


我可以建议您只打开calc.exe文件而不是打开批处理文件吗

Runtime.getRuntime().exec("c:\\windows\\System32\\calc.exe", null, new File("c:\\windows\\System32\\calc.exe"));
编辑:如果仍要将其作为批处理文件运行,请使用以下命令:

Runtime.getRuntime().exec("cmd /c start nameOfTheBatchFile.bat");

请注意,exec方法中的第二个变量是设置要从中调用程序的目录。

为什么要调用
cmd
来调用
start
ro call batch?为什么不
Runtime.getRuntime().exec(“nameofBatchFile.bat”)?因为批处理文件不是可执行文件,所以它在cmdOk下运行,但为什么不只是
Runtime.getRuntime().exec(“cmd/c nameofBatchFile.bat”)
Runtime.getRuntime().exec(“batchfile.bat的开始名”)?为什么是3个进程?如果你读了我的答案,已经说过要调用cmd。。。调用start的原因是is创建了一个新的进程,并让cmd关闭,否则cmd将保持打开状态,直到您关闭批处理文件,而批处理文件在您关闭calif之前不会结束阅读我的问题我可以理解您的答案。。。请在回答之前阅读:)真的:您不能启动批处理,因为它不可执行-同意!但是您可以只通过一个
cmd
调用或一个
start
调用启动它。你为什么两者都需要?