Java:当使用 Procrun 将应用程序注册为 Windows 服务时,使用 ProcessBuilder 运行批处理文件

标签 java windows-services processbuilder procrun

已经有一个 7 年前的问题,标题相似,但没有接受的答案,因此重新发布,因为我的问题有更多详细信息。

7年前的问题: Running batch file from Java registered as Windows Service using Procrun

我的问题:

我有以下java类:

public static void main(String[] args) {
    ProcessBuilder processBuilder = new ProcessBuilder(new String[] {"C:\\Work\\test.bat"});
    processBuilder.redirectErrorStream(true);   
    Process process = processBuilder.start();
    int exitVal = process.waitFor();
}

当直接从 eclipse 运行时,test.bat 会成功执行。 但是,当从服务运行它时,test.bat 不会被执行。

我已经使用 procrun 将 jar 安装为 Windows 服务。还要验证服务是否正确安装。我这样做了:

public static void main(String[] args)
    {
        try {
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            File file = new File("C:\\Work\\temp.txt");
            FileUtils.writeStringToFile(file, "hello world "+formatter.format(calendar.getTime()), "UTF-8", false);         
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

并且该代码块可以从服务中执行,没有任何问题。只是 test.bat 没有被执行。

procrun 不允许 ProcessBuilder 吗?

编辑

我的test.bat:

start ""cmd/c "echo Hello world!&echo(&pause"

最佳答案

您确定 test.bat 没有被执行吗?请在任务管理器中确认。请务必显示所有用户的进程,因为您的批处理文件可能会在系统帐户中运行。

请注意,您的批处理文件将在 isolated Session 0 中启动并且您将无法看到命令窗口(并且您将无法响应“暂停”命令”)。当您从测试毕业到真正/有用的东西时,您应该考虑此限制...

关于Java:当使用 Procrun 将应用程序注册为 Windows 服务时,使用 ProcessBuilder 运行批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55350750/

相关文章:

java - 过滤自动完成适配器的 json 结果

仅适用于大写字母和数字的 Java 正则表达式

windows - 将 Azure 存储模拟器作为服务运行

c# - Windows 无法启动服务

java - Process 类的 getOutputStream 方法如何工作?

java - 代码执行时项目没有响应

java - JAR 在本地工作,但在 Docker 容器中挂起失败 - Apache-POI

java - 如何实现模块化 Ant 构建?

Python Windows 服务自动启动太早

java - 使用 bash 脚本设置 java ProcessBuilder 环境