2011-07-15 55 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或使用映射驅動器)。

相關問題