System.Diagnostics.Process.Start问题“无法找到特定文件”

时间:2010-02-15 14:42:10

标签: c#

当我在计算机上启动以下代码时,它可以正常工作

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

target - 文件的非绝对路径。文件存在。 清除虚拟机异常“无法找到特定文件”。

有什么建议吗?
更新
我强调在我的电脑上运行正常。 为什么它不能在另一台计算机上运行

5 个答案:

答案 0 :(得分:7)

永远不要使用+运算符连接路径。请改用Path.Combine()。这也可能是问题的根源。

答案 1 :(得分: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);

在失败的系统上运行此命令。完全合格的路径真的是你期望的吗?

如果不是 - 你已经完成了这项工作。

如果是,则开始调查权限等内容。执行此操作的用户是否有权访问或执行文件或文件夹?

回复任何进展......

答案 2 :(得分:1)

GetCurrentDirectory()不会在其返回路径的末尾添加“\”字符。如果您这样做,则需要自己添加。

答案 3 :(得分:1)

也许缺少DLL?尝试在Dependency Walker中加载EXE以查看它是否会产生任何错误(在您的虚拟机上)。

此外,Process.Start的MSDN页面表示如果PATH环境变量的字符串包含引号,则ProcessStart可以抛出FileNotFoundException。

答案 4 :(得分:0)

使用procmon查看它尝试打开的文件,并且已经指出,使用Path.Combine来连接路径。

您的开发计算机上没有其他计算机上的权限问题吗?