2010-02-15 60 views
3

當我啓動我的電腦是在下面的代碼工作正常System.Diagnostics.Process.Start問題「無法找到特定文件」

string target = e.Link.LinkData as string; 
target = System.IO.Directory.GetCurrentDirectory() + target; 
System.Diagnostics.Process.Start(target); 

目標 - 非絕對文件路徑。文件存在。 在清除虛擬機異常「無法找到特定文件」時產生。

有什麼建議嗎?
更新
我強調的是,我的電腦上正常工作。 爲什麼它不能在另一臺計算機上工作

+2

仔細記錄您得到的異常。如果它是一個Win32Exception,我們需要知道它的NativeErrorCode屬性的值。 –

回答

2

我會做,試圖得到這條底線的第一件事情,就是驗證失敗時所報告的確切路徑。

修改你的代碼是這樣的(注意:我已經轉向使用Path.Combine由另一海報提及):

string target = e.Link.LinkData as string; 
target = Path.Combine(System.IO.Directory.GetCurrentDirectory() + target); 
var fileInfo = new FileInfo(target); 
if (!fileInfo.Exists) 
{ 
    throw new FileNotFoundException("The requested file was not found: " + fileInfo.FullName); 
} 
System.Diagnostics.Process.Start(target); 

運行此失敗的系統上。完全合格的路徑真的是你期望的嗎?

如果否 - 你已經找到了原因。

如果是,則開始調查權限等內容。執行此操作的用戶是否有權訪問或執行該文件或其所在的文件夾?

發回任何進度...

7

從不連接使用+運算符的路徑。改爲使用Path.Combine()。這也可能是問題的根源。

0

使用procmon,看看到底是哪個文件試圖打開,並且已經指出的那樣,使用Path.Combine來連接你的路。

難道說你有其他機器上的權限問題,你沒有你的dev的機器?

+0

權限問題不適合。在虛擬機管理員用戶上運行應用程序 – zabulus

1

GetCurrentDirectory()不在其返回的路徑末尾添加「\」字符。如果你這樣做,你需要自己添加它。

+0

在這種情況下,關於您鍵入的斜槓在目標變量中。 – zabulus

1

也許DLL丟失?嘗試在Dependency Walker中加載EXE以查看它是否會產生任何錯誤(在虛擬機上)。

此外,對於在的Process.Start MSDN頁說,ProcessStart可以拋出一個FileNotFoundException異常,如果PATH環境變量包含引號的字符串。

+0

引發的異常不是FileNotFoundException它是Win32Exception – zabulus