2012-09-16 33 views
2

這是爲什麼C#的ProcessStartInfo

ProcessStartInfo myProcess = new ProcessStartInfo(path); 
myProcess.UserName = username; 
myProcess.Password = MakeSecureString(password); 
myProcess.UseShellExecute = false; 
Process.Start(myProcess); 

工作,但

ProcessStartInfo myProcess = new ProcessStartInfo(); 
myProcess.FileName = Path.GetFileName(path); 
myProcess.WorkingDirectory = Path.GetDirectoryName(path); 
myProcess.UserName = username; 
myProcess.Password = MakeSecureString(password); 
myProcess.UseShellExecute = false; 
Process.Start(myProcess); 

不是。

我想用,因爲這個問題的第二個:https://stackoverflow.com/a/2621943/1306186

我經常收到未發現異常文件...任何想法?

編輯:
Path是例如@"C:\Users\User\Desktop\ConsoleApplication2.exe"

+2

您打印了「Path.GetFileName(path);'和'Path.GetDirectoryName(path);'的結果嗎?他們是否正確? – Tudor

+0

在你的代碼中放置一個斷點並比較'ProcessStartInfo'實例和第二個實例中的值。看看有什麼不同。如果你改變了'myProcess.UseShellExecute = true;'這兩個都在工作,那麼你可以使用 –

+0

。 – hamed

回答

5

這一點是錯誤的

myProcess.FileName = Path.GetFileName(path); 

這應該是

myProcess.FileName = path; 

通行證在C:\SomeDir\SomeApp.exe,你必須將文件名設置爲SomeApp.exe,它無法找到的代碼。算你自己幸運,有可能的情況下(例如你的應用程序和你想運行的應用程序在同一個文件夾中),然後在部署時你可能會很有趣。

+0

這和我已經標記爲'working'的第一個例子完全一樣, ...構造者除了設置'FileName'屬性之外什麼都不做。 – Zulakis

+0

@Zulakis,你的觀點是?第二個例子沒有工作,因爲它找不到ConsoleApplication2.exe。第一個例子(和建議的更正)的確如此,因爲您告訴它ConsoleApplication2.exe位於C:\ Users \ User \ Desktop中,它可以找到它。如果這不是你想要的答案,請改變你的問題,讓我們知道你所做的一個線索...... –

+0

根據我的入門帖子中的鏈接帖子,這樣做是錯誤的......'[QUOTE]我有我的在文件名屬性中設置完整的路徑和文件名,相反,將您的路徑放置在「工作目錄」屬性下,僅爲「文件名」保留文件名屬性。 [/ QUOTE]'.... – Zulakis

0

由於構造函數,當你用字符串參數使用它的完整路徑初始化FileName我會嘗試使用Path.GetFullPath()而不是簡單地Path.GetFileName()