我有一个程序可以监视进程并在它们关闭或失败时重新启动它们。它起初是一个工作项目,但我把它带回家,将游戏服务器放在我的家用服务器上,即Minecraft,Terraria和最近的Cube World。该程序是独立的,位于我的桌面上。当它启动Cube World的Server.exe时,exe通常会在Cube World的文件夹中创建的所有文件都在桌面上创建。我的猜测是我的程序有一个桌面的工作目录,所以它启动的任何子进程(如Server.exe)将具有相同的工作目录。这个问题并不仅限于Cube World在家的服务器。该计划在重要的后端流程中保持活力。
如果我使用ProcessStartInfo
在C#中启动进程,如何确保启动进程的工作目录是exe所在的目录?进程可以使用相对路径名开始,也可以在系统路径上进行,这使得这更加困难。
答案 0 :(得分:3)
将ProcessStartInfo.WorkingDirectory与Check if an executable exists in the windows path结合使用,以确定可执行文件的路径。
你可能需要首先检查相对路径,我认为它也应该处理绝对路径(我没有测试过以下代码,但它对我来说没问题):
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
}