TL; DR
当用户双击或选择一个文件并从Windows资源管理器中按下 详细信息Enter
键时,正在执行的确切的低级内核和OS进程是什么?
这似乎是一个很奇怪的问题,但是我很好奇从Windows资源管理器打开文件的细节。
具体地说,我想知道的是用户双击或选择文件并从Windows资源管理器中按下Enter
键时正在执行的确切的低级内核和OS进程。
我问的原因是因为我有一个应用程序,允许用户基于存储在数据库中的元数据浏览和搜索文件。当用户单击我提供的Open
按钮时,我将启动一个过程,其中根文件是所选文件的路径。另外,值得一提的是,这些文件位于网络共享上。
这已经工作了很多年,但是最近我的公司已经迁移到新的Active Directory服务器,现在只有极少数用户(1-2%)损坏了该应用程序。真正奇怪的是,这些用户不能从我的应用程序中打开此文件,但是他们可以浏览到该位置并从Windows资源管理器中打开它。当我的应用程序尝试打开文件时,它会收到一个非常普通的异常,指出找不到该文件。
我已经三重检查了应用程序正在使用的路径(用于多个文件),并且该路径不正确。在打开文件之前,我已经验证我的用户已经并且已经连接到这些网络驱动器。一切都已正确设置,并且应该可以运行,但是我的应用程序(或System.Process
)无法“查看”或打开这些文件。
Windows资源管理器应用程序与在应用程序中使用System.Process
有何不同?
对于那些在回答之前必须有代码的人,这里是我用来打开文件的异常简洁的代码。再次,这已经工作了多年,据我所知,这就是让Windows从.Net中打开文件的方式。
//From my Button-Click Event... string file = e.Cell.Value.ToString(); try { Process p = new Process(); p.StartInfo.FileName = file; p.StartInfo.Verb = "Open"; p.Start(); } catch (Exception ex) { MessageBox.Show("A problem has occurred while trying to open the doccument." + "Please make sure that the file below exists and that you have permission " + "to view it." + Environment.NewLine + Environment.NewLine + file + Environment.NewLine + "---------------" + Environment.NewLine + ex.Message ); //ex.Message states "The system cannot find the file specified" }
还有一件事。我在SO上找到了this question,但它不适用于/应该不适用于此问题。我的应用只是尝试打开PDF和一些工程图文件。没什么,它不需要管理员权限。另外,我认为不需要任何用户身份验证,因为大多数用户从未收到此消息,并且他们已经通过登录并浏览到网络位置在网络上进行了验证。
TL; DR]当用户双击或选择一个文件并在Windows资源管理器中按Enter键时,正在执行的确切的低级内核和OS进程是什么? ...
当用户双击或选择一个文件并从Windows资源管理器中按Enter键时,正在执行的确切的低级内核和OS调用是什么?
您的代码中存在一个非常常见的故障模式,无法正确设置ProcessStartInfo.WorkingDirectory。一部分程序依赖于Explorer将默认工作目录设置为包含该文件的目录,并且在未设置该文件时会掉线。他们会做一些不明智的事情,例如尝试在不指定完整路径名的情况下打开配置文件,只有在正确设置工作目录后才能使用。
您可以这样修复:
您的“ TL; DR”问题很简短,但很明确,但是我不确定回答该问题是否可以解决您的问题。汉斯·帕桑特(Hans Passant)的答案可能有用得多。不过,我将尝试提供一些信息。
Windows具有多个层,在这种情况下,两个有趣的层是Windows Shell
您可以使用Acrobat.exe
尝试类似的方法吗?
file.pdf