这是因为工作目录不同 - 默认情况下,在启动新进程时,新进程的工作目录设置为现有进程的工作目录(这又可能是现有应用程序所在的目录)。
通常,您的应用程序将使用工作目录作为包含可执行文件的目录运行 - 例如,这是创建新快捷方式时的默认设置(您可以在“开始于”字段下的快捷方式属性中看到这一点。
当您的应用程序从命令提示符或从另一个应用程序运行时,工作目录会更改,并且相对路径会解析到完全不同的目录。
您可以更改调用应用程序以WorkingDirectory
将新进程的属性设置为它期望的值,但是修复此问题的正确方法是修改您的应用程序,以便它使用基于可执行文件路径的绝对路径。 Assembly.GetExecutingAssembly().Location
可用于获取正在运行的可执行文件的路径,因此以下代码应该可以解决问题:
static string GetAbsolutePathFromRelative(string RelativePath)
{
string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string absolutePath = Path.Combine(directory, RelativePath);
// This final call is to stop paths like "C:\Dir\..\OtherDir\file.txt" being returned
return Path.GetFullPath(absolutePath);
}