【发布时间】:2019-12-06 10:34:58
【问题描述】:
我正在尝试自动更新我服务器上的一些数据。 Windows 服务器 2008 R2。 有以下代码的asp.net core 2.1应用程序
var timeoutMs = 5000;
var process = new Process();
process.StartInfo.FileName = exePath;
process.StartInfo.Arguments = arguments;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();
return process.WaitForExit(timeoutMs));
这里是棘手的部分。
当我使用 exePath=svn.exe arguments=update "someWorkingFolderPath" 时,进程挂起并在超时后返回 false(从 cmd 定期更新需要几毫秒)
然后存储库损坏并锁定自身(因为更新未正确退出),当我在 cmd 上运行“svn update”时,它告诉我调用 svn cleanup。
!和!当存储库处于此锁定状态时,具有相同参数的进程不会挂起(因为相同的 svn 错误),直到我运行清理以打破工作文件夹上的锁定。然后又挂了。
调用 'svn log "folderPath"' 也会挂起进程。随时
如您所见,我没有重定向任何流,我可以从 cmd 手动成功运行所有这些命令。应用程序池从我用于 cmd 的相同本地管理员身份开始(我知道,不完美,但这不是主题)。我使用的是 TortoiseSVN 自带的 svn 命令行工具。
什么可能导致这些问题?
【问题讨论】:
-
我在我的机器上尝试您的代码没有任何问题(.NET Core 控制台应用程序)。该文件夹上没有其他写入进程(防病毒,其他实例)? Sysinternals procmon 可以帮助识别其他阻塞进程。
标签: c# svn process windows-server-2008-r2