自我更新 Asp.Net-核心 Windows 服务阻塞端口

Self-Updating Asp.Net-Core Windows Service Blocked Port

开发自我更新Asp.Net核心Windows服务,其工作原理大致如下:

  1. 服务下载新版本并将其解压缩到“更新”文件夹中
  2. 服务启动更新程序进程
  3. 更新程序停止服务并等待服务完成
  4. 更新程序将当前的“bin”文件夹移动到“backup”,然后将“update”移动到“bin”
  5. 更新程序应该再次启动服务

问题

5. 问题发生了,正在使用 运行 我的应用程序的端口会很忙即使我等待端口空闲 2 分钟,它也不会。

但是当“手动”调用更新程序时,它工作得很好。端口立即释放,可以重新启动服务。

更新程序在服务中是这样启动的:

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

process.Start();

看起来它仍然连接到服务进程,尽管它们有不同的 PID。

有谁知道我如何解耦进程或打开端口?

我发现了问题:

父进程正在等待子进程,因此端口仍然打开。

解决方案:

您需要将 "UseShellExecute" 设置为 true。