Install4j - есть ли способ убить используемые в настоящее время порты?

Когда наш установщик выходит из строя, по умолчанию запускается процесс отката. Поскольку наш установщик использует службы Windows, мы используем свойство Optional Rollback Script, чтобы закрыть и удалить эти службы в случае сбоя после их установки.

Наша проблема заключается в том, что некоторые процессы остаются назначенными для некоторых портов, что приводит к тому, что пользователь не может удалить каталог установки без предварительного уничтожения этих портов.

Теперь в командной строке довольно легко найти и убить эти процессы с помощью команд:

netstat -ano | findstr :<portNumber>
taskkill /PID <processId> /F

Моя проблема в том, что я не могу запустить эти команды через действие Run Script, получить идентификаторы их процессов и закрыть их. (несмотря ни на что, я не могу вернуть вывод)

Есть ли такая встроенная опция в установщике? Если нет, то есть ли альтернативный способ?


person Nimrod    schedule 07.03.2018    source источник


Ответы (1)


Вы можете использовать API WinProcesses для уничтожения процессов:

https://resources.ej-technologies.com/install4j/help/api/com/install4j/api/windows/WinProcesses.html

Что касается вызова netstat, вы должны позвонить

netstat -ano

с действием «Запустить исполняемый или пакетный файл» и установите для его свойства «Перенаправить стандартный вывод» значение «В переменную установщика». Затем вы можете проанализировать вывод в действии «Выполнить сценарий».

person Ingo Kegel    schedule 07.03.2018
comment
Спасибо. У меня возникли трудности с запуском команды netstat -ano через действие «Выполнить исполняемый или пакетный файл» и получением вывода. Должен ли я определять свойство Working Directory? - person Nimrod; 11.03.2018
comment
Нет, но нужно указать полный путь к netstat, т.е. ${installer:sys.system32Dir}\netstat.exe, а -ano должно идти в свойство Arguments. - person Ingo Kegel; 11.03.2018
comment
Это работает, но я не могу использовать символ канала на | findstr :‹portNumber› для фильтрации вывода по определенному порту. Добавление второго аргумента в новую строку в свойстве Arguments не работает, и выходные данные возвращают значение null. - person Nimrod; 11.03.2018
comment
Действительно, труба не поддерживается. Вы должны были бы проанализировать вывод самостоятельно. - person Ingo Kegel; 11.03.2018
comment
Есть ли переменная полного пути установщика к netstat в Linux? - person Nimrod; 13.03.2018
comment
Нет, но вы можете выполнить /bin/sh в качестве исполняемого файла и передать аргументы -c, а затем всю командную строку в качестве второго аргумента, который может вызвать netstat из пути без полного пути. Таким образом, вы также можете настроить цепочку процессов с каналами. - person Ingo Kegel; 13.03.2018