我有一个程序,可以监视进程并在它们关闭或失败时重新启动它们。这最初是一个工作项目,但我把它带回家来在我的家庭服务器上保持游戏服务器的运行,例如Minecraft、Terraria和最近的Cube World。该程序是独立的,位于我的桌面上。当它启动Cube World的Server.exe时,exe通常会在Cube World文件夹中创建的所有文件都会被创建在桌面上。我猜测我的程序有一个工作目录在桌面上,因此它启动的任何子进程(如Server.exe)都将具有相同的工作目录。这个问题不仅仅局限于家里的Cube World服务器。这个程序还在工作中与重要的后端进程保持连接。
如果我使用C#中的
如果我使用C#中的
ProcessStartInfo
启动进程,如何确保启动的进程的工作目录是exe所在的目录?该进程可能使用相对路径名启动,也可能在系统PATH中,这使得问题变得更加困难。
Path.GetFullPath(pathToExe)
而不是附加自己应用程序的路径。但我知道您的意思,可能会尝试一下。在更改代码并获得真正模糊的错误之前,我想要确保。 - Corey OgburnPath.Combine
中得到的结果)。 - Michael BrayGetFullPath
都不能保证这一点。确保这一点的方法是确定EXE的完整路径(你的方式或者我的方式),然后通过在ProcessStartInfo.FileName
中指定完整路径来启动该特定的EXE。设置ProcessStartInfo.WorkingPath
是一个好主意,但实际上与启动哪个EXE没有任何关系。 - Michael Bray