3

我有一个程序可以监视进程并在它们关闭或失败时重新启动它们。它最初是一个工作项目,但我把它带回家让游戏服务器保持在我的家庭服务器上,即 Minecraft、Terraria 和最近的 Cube World。该程序是独立的,位于我的桌面上。当它启动 Cube World 的 Server.exe 时,该 exe 通常会在 Cube World 的文件夹中创建的所有文件都会在桌面上创建。我的猜测是我的程序有一个桌面工作目录,因此它启动的任何子进程(如 Server.exe)都将具有相同的工作目录。问题不仅限于 Cube World 在家中的服务器。该程序与工作中的重要后端进程保持活力。

如果我在 C# 中启动一个进程,ProcessStartInfo如何确保启动进程的工作目录是 exe 所在的目录?该进程可能以相对路径名开始,也可能位于系统路径上,这使这变得更加困难。

4

1 回答 1

3

结合使用ProcessStartInfo.WorkingDirectory和检查 Windows 路径中是否存在可执行文件来确定可执行文件的路径。

您可能需要首先检查相对路径,我认为它也应该处理绝对路径(我没有测试以下代码,但对我来说它看起来不错):

string myAppPath = System.Reflection.Assembly.GetEntryAssembly().Location;
if (File.Exists(Path.Combine(myAppPath, pathToExe)))
{
    workDir = Path.GetDirectoryName(Path.Combine(myAppPath, pathToExe));
}
else 
{
    // Use the referenced article to iterate thru System PATH to find the right path
}
于 2013-07-09T01:47:05.380 回答