Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从其他应用程序启动可执行文件时未找到文件_C#_Executable_Relative Path_Filenotfoundexception - Fatal编程技术网

C# 从其他应用程序启动可执行文件时未找到文件

C# 从其他应用程序启动可执行文件时未找到文件,c#,executable,relative-path,filenotfoundexception,C#,Executable,Relative Path,Filenotfoundexception,在我的应用程序中,在用户登录后,我设置了一些picturebox/button/etc图像,并对它们进行缩放等等。我使用相对路径,例如: @".\Images\SomeImage.png" 直接启动应用程序时,它可以正常工作,但如果您尝试通过其他应用程序运行它: Process process = new Process(); process.StartInfo.FileName = networkPath; process.Start(); 它死了,并出现了一个文件未找到错误,因为它无法找

在我的应用程序中,在用户登录后,我设置了一些picturebox/button/etc图像,并对它们进行缩放等等。我使用相对路径,例如:

@".\Images\SomeImage.png"
直接启动应用程序时,它可以正常工作,但如果您尝试通过其他应用程序运行它:

Process process = new Process();
process.StartInfo.FileName = networkPath;
process.Start();
它死了,并出现了一个文件未找到错误,因为它无法找到图像。如果我尝试通过命令提示符启动它,它也会这样做。可执行文件存储在网络驱动器上。为什么相对路径在这种情况下不起作用?我可以继续硬编码完整的路径,但这会让我感觉脏兮兮的。。。有什么想法吗?

您需要将属性设置为正确的路径

您发布的路径:

@".\Images\SomeImage.png"

不是网络路径(它不是UNC或使用映射的驱动器)。

这是因为工作目录不同-在启动新进程时,默认情况下,新进程的工作目录设置为现有进程的工作目录(这可能是现有应用程序所在的目录)

通常,您的应用程序将以工作目录作为包含可执行文件的目录运行-例如,这是创建新快捷方式时的默认设置(您可以在“开始位置”字段下的快捷方式属性中看到)

但是,当您的应用程序从命令提示符或其他应用程序运行时,工作目录将发生更改,并且相关路径将解析为完全不同的目录

您可以将调用应用程序更改为将新进程的属性设置为它期望的值,但是正确的修复方法是修改您的应用程序,使其基于可执行文件的路径使用绝对路径。
Assembly.getExecutionGassembly().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);
}   

与应用程序可执行文件相关的路径是什么?