C#的ProcessStartInfo

问题描述:

这是为什么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://*.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

这一点是错误的

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

由于构造函数,当你用字符串参数使用它的完整路径初始化FileName我会尝试使用Path.GetFullPath()而不是简单地Path.GetFileName()