2011-07-15 67 views
2

推出在我的应用程序,经过我的用户登录设置一些图片框/按钮/等图像,并做他们和诸如此类的东西一定比例。我使用相对路径,例如:文件可执行文件时,从其他应用程序

@".\Images\SomeImage.png" 

当应用程序直接启动它工作正常,但如果您尝试通过其他应用程序来运行它:

Process process = new Process(); 
process.StartInfo.FileName = networkPath; 
process.Start(); 

它死了,用一个文件来了没有找到错误,因为它找不到图像。如果我尝试通过命令提示符启动它,它也会这样做。可执行文件存储在网络驱动器上。为什么相对路径在这种情况下不起作用?我可以继续前进并硬编码完整路径,但这会让我感到肮脏......任何想法?

+0

相对路径是什么?应用程序可执行? – Justin

回答

3

这是因为工作目录是不同的 - 默认情况下,启动一个新流程新工艺的工作目录设置为现有流程的工作目录(这将反过来可能是现有的应用程序目录时包含在内)。

通常,您的应用程序将工作目录作为目录的可执行文件包含在运行 - 创建例如一个新的快捷方式时,(你可以在“在启动”下看到这个快捷方式的属性,这是默认场。

当你的应用程序从命令提示符下或从另一个应用程序,不过工作目录改变,相对路径运行被解析到一个完全不同的目录中。

您可以更改调用应用程序本身新的过程,预计值的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); 
} 
3

您需要的Process.WorkingDirectory属性设置为正确的路径。

的路径你贴:

@".\Images\SomeImage.png" 

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

相关问题