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

问题描述 投票:0回答:1

There is already a 7 year old question with similar title but no accepted answer, hence reposting as my question has additional details.

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没有被执行。

是不允许ProcessBuilder从procrun?

编辑

我的test.bat

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

java windows-services processbuilder procrun
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.