自我更新 Asp.Net-核心 Windows 服务阻塞端口
Self-Updating Asp.Net-Core Windows Service Blocked Port
开发自我更新Asp.Net核心Windows服务,其工作原理大致如下:
- 服务下载新版本并将其解压缩到“更新”文件夹中
- 服务启动更新程序进程
- 更新程序停止服务并等待服务完成
- 更新程序将当前的“bin”文件夹移动到“backup”,然后将“update”移动到“bin”
- 更新程序应该再次启动服务
问题
5. 问题发生了,正在使用 运行 我的应用程序的端口会很忙即使我等待端口空闲 2 分钟,它也不会。
但是当“手动”调用更新程序时,它工作得很好。端口立即释放,可以重新启动服务。
更新程序在服务中是这样启动的:
Process process = new Process {
StartInfo = new ProcessStartInfo(Path.Combine(parent, "VersionUpdater.exe")) {
CreateNoWindow = true,
UseShellExecute = false
}
};
process.Start();
看起来它仍然连接到服务进程,尽管它们有不同的 PID。
有谁知道我如何解耦进程或打开端口?
我发现了问题:
父进程正在等待子进程,因此端口仍然打开。
解决方案:
您需要将 "UseShellExecute" 设置为 true。
开发自我更新Asp.Net核心Windows服务,其工作原理大致如下:
- 服务下载新版本并将其解压缩到“更新”文件夹中
- 服务启动更新程序进程
- 更新程序停止服务并等待服务完成
- 更新程序将当前的“bin”文件夹移动到“backup”,然后将“update”移动到“bin”
- 更新程序应该再次启动服务
问题
5. 问题发生了,正在使用 运行 我的应用程序的端口会很忙即使我等待端口空闲 2 分钟,它也不会。
但是当“手动”调用更新程序时,它工作得很好。端口立即释放,可以重新启动服务。
更新程序在服务中是这样启动的:
Process process = new Process {
StartInfo = new ProcessStartInfo(Path.Combine(parent, "VersionUpdater.exe")) {
CreateNoWindow = true,
UseShellExecute = false
}
};
process.Start();
看起来它仍然连接到服务进程,尽管它们有不同的 PID。
有谁知道我如何解耦进程或打开端口?
我发现了问题:
父进程正在等待子进程,因此端口仍然打开。
解决方案:
您需要将 "UseShellExecute" 设置为 true。