当我在计算机上启动以下代码时,它可以正常工作
string target = e.Link.LinkData as string;
target = System.IO.Directory.GetCurrentDirectory() + target;
System.Diagnostics.Process.Start(target);
target - 文件的非绝对路径。文件存在。 清除虚拟机异常“无法找到特定文件”。
有什么建议吗?
的更新
我强调在我的电脑上运行正常。
为什么它不能在另一台计算机上运行
答案 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来连接路径。
您的开发计算机上没有其他计算机上的权限问题吗?