Java: запуск пакетного файла с помощью ProcessBuilder, когда приложение зарегистрировано как служба Windows с использованием Procrun

Уже есть вопрос 7-летней давности с аналогичным названием, но без принятого ответа, поэтому я публикую его повторно, поскольку мой вопрос содержит дополнительные детали.

Вопрос 7-летней давности: Запуск командного файла из Java зарегистрирован как служба Windows с помощью 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 не выполняется.

Я установил банку как службу Windows, используя procrun. Также для проверки правильности установки службы. Я сделал это:

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?

ИЗМЕНИТЬ

My test.bat :

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


person tryingToLearn    schedule 26.03.2019    source источник


Ответы (1)


Вы уверены, что test.bat не выполняется? Пожалуйста, подтвердите в диспетчере задач. Обязательно покажите процессы всех пользователей, так как ваш пакетный файл, вероятно, будет запущен в системной учетной записи.

Обратите внимание, что пакетный файл будет запущен в изолированном сеансе 0, и вы не сможете увидеть командное окно (и вы не сможете ответить на команду «пауза»). Вы должны учитывать это ограничение, когда переходите от своего теста к чему-то реальному/полезному...

person CoreTech    schedule 26.03.2019
comment
Есть ли способ запустить приложение на основе графического интерфейса из службы Windows? Например, Я попытался открыть браузер / проводник из файла bat, но они не отображаются, когда служба вызывает этот пакетный файл (они отображаются, когда файл bat вызывается напрямую) - person tryingToLearn; 27.03.2019
comment
Сессия 0 развеяла многие сомнения. Одним из вариантов запуска приложений с графическим интерфейсом в качестве службы является YAJSP (yajsw.sourceforge.net/#mozTocId210483) - person tryingToLearn; 27.03.2019
comment
Приложения с графическим интерфейсом обычно нормально работают в сеансе 0 — вы просто не можете видеть их или взаимодействовать с ними из обычного сеанса входа в систему (сеанс 1, 2 и т. д.). Это фундаментальное ограничение, встроенное в операционную систему, и все сервисные оболочки (включая YAJSP) должны с ним бороться. - person CoreTech; 28.03.2019
comment
Да, но в моем случае мне нужен способ предоставить интерактивный графический интерфейс. Любые указатели? - person tryingToLearn; 28.03.2019