gpt4 book ai didi

c# - 在 Windows 中,当我在 Windows 资源管理器中双击文件时会发生什么?

转载 作者:可可西里 更新时间:2023-11-01 12:27:39 26 4
gpt4 key购买 nike

长话短说

当用户在 Windows 资源管理器中双击或选择文件并按下 Enter 键时,执行的具体低级内核和操作系统进程是什么?


详情

这似乎是一个相当奇怪的问题,但我很好奇从 Windows 资源管理器打开文件的具体细节。

具体来说,我想知道当用户双击或选择文件并按下 Enter 键时正在执行的确切的低级内核和操作系统进程在 Windows 资源管理器中。

我问的原因是因为我有一个应用程序允许用户根据存储在数据库中的元数据浏览和搜索文件。当用户单击我提供的 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"
}

还有一件事。我找到了 this question在 SO 上,但它不适用于/不应该适用于这个问题。我的应用只是试图打开 PDF 和一些工程图文件。没什么特别的,它不应该需要管理员访问权限。此外,我认为不需要任何用户身份验证,因为大多数用户从未收到此消息,并且他们已经通过登录并浏览到网络位置在网络上验证了自己。

最佳答案

What are the exact, low-level kernel & OS calls that are being executed when a user either double-clicks or selects a file and presses the Enter key from within Windows Explorer?

你可以自己测试一下。这是我的做法:示例 C# 程序代码

class Program
{
static void Main(string[] args)
{

}
}

现在您可以从预定义的位置运行此应用程序。然后您可以使用 ProcMon来自 SysInternals 的应用程序来观察低级调用。这是 ProcMon 在我的机器上生成的 csv 文件的快照。我放了一个过滤器,只包含文件的 path,它是 c:\test.exe

"Time of Day","Process Name","PID","Operation","Path","Result","Detail"
"14:57:55.3495633","Explorer.EXE","2568","CreateFile","C:\Test.exe","SUCCESS","Desired Access: Generic Read, Disposition: Open, Options: Open Requiring Oplock, Attributes: N, ShareMode: Read, AllocationSize: n/a, OpenResult: Opened"
"14:57:55.3498808","Explorer.EXE","2568","FileSystemControl","C:\Test.exe","SUCCESS","Control: FSCTL_REQUEST_FILTER_OPLOCK"
"14:57:55.3507711","Explorer.EXE","2568","CreateFile","C:\Test.exe","SUCCESS","Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened"
...

完整版的 csv 可在 pastebin 上获得. csv 文件中的每一行都对应一个低级别的调用,加上由于对路径的严格过滤而被排除的其他绒毛。

关于c# - 在 Windows 中,当我在 Windows 资源管理器中双击文件时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com