我有一个.NET Core项目,该项目在MongoDB上执行了一些操作。 其中之一是检查当前的mongod版本,然后更改bin目录的名称(此目录包含mongod.exe文件)。
由于某种原因,如果我在检查mongod版本后没有执行Thread.Sleep,我将无法进行目录重命名,因为我遇到以下异常:
System.IO.IOException:拒绝访问路径“ C:\ MyMongo \ bin”。
请注意,在GetMongoVersion方法中,我在“返回版本”消息之前收到了“ ### EXITED ###”消息。
GetMongoVersion方法:
public Version GetMongoVersion(string path)
{
Version version = null;
var mongoServicePath = Path.Combine(GlobalConfiguration.Configuration["MongoServicePath"], "bin");
using (var process = new Process())
{
process.StartInfo = new ProcessStartInfo
{
WorkingDirectory = mongoServicePath,
UseShellExecute = false,
FileName = Path.Combine(mongoServicePath, MongodFileName),
Arguments = "--version",
RedirectStandardOutput = true,
CreateNoWindow = true
};
process.EnableRaisingEvents = true;
process.Exited += (sender, args) => _log.Fatal("### EXITED ###");
process.Start();
process.WaitForExit();
while (version == null)
{
var line = process.StandardOutput.ReadLine();
if (line != null && line.StartsWith("db version"))
{
var fullVersion = line.Split(' ')[2].Substring(1);
var major = int.Parse(fullVersion[0].ToString());
var minor = int.Parse(fullVersion[2].ToString());
version = new Version(major, minor);
}
}
_log.Fatal($"Returning version: {version}");
return version;
}
}
RenameDirectory方法:
public bool RenameDirectory(string currentName, string newName)
{
try
{
Directory.Move(currentName, newName);
return true;
}
catch (Exception ex)
{
_log.Error(ex);
return false;
}
}