Самостоятельно обновляющийся заблокированный порт службы Windows Asp.Net-Core - PullRequest
0 голосов
/ 26 сентября 2018

Разработка самообновляющейся службы Windows Asp.Net Core, которая работает примерно так, как показано ниже:

  1. Служба загружает новый выпуск и распаковывает его в папку «update»
  2. Служба запускает процесс обновления
  3. Программа обновления останавливает службу и ожидает завершения службы
  4. Программа обновления перемещает текущую папку bin в «резервное копирование», а затем «обновление» вbin "
  5. Программа обновления должна снова запустить службу

Проблема

Вкл 5. Возникла проблема, из-за которой порт, используемый мной для запуска моего приложения, можетбыть занятым Даже если я подожду, пока порт освободится, как 2 минуты, это не произойдет.

Но при вызове программы обновления вручную, он работает просто отлично.Порт мгновенно освобождается, и служба может быть запущена снова.

Программа обновления запускается так в службе:

Process process = new Process {
    StartInfo = new ProcessStartInfo(Path.Combine(parent, "VersionUpdater.exe")) {
        CreateNoWindow = true,
        UseShellExecute = false
    }
};

process.Start();

Похоже, она все еще подключена к процессу службы, хотя они получили разные PID.

Кто-нибудь знает, как я могу отделить процессы или открыть порт?

1 Ответ

0 голосов
/ 01 октября 2018

Я обнаружил проблему:

Родительский процесс ожидает дочерний процесс, поэтому порт все еще открыт.

Решение:

Необходимо установить для «UseShellExecute» значение true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...