注册 Windows 资源管理器 Shell 扩展(上下文菜单处理程序)

注册 Windows 资源管理器 Shell 扩展(上下文菜单处理程序)

我尝试开发一个 Windows 资源管理器上下文菜单处理程序。我对这种类型的开发还不熟悉。所以我想从示例开始。

我以 SharpShell 示例开始:

https://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-Menus

下载并编译了 CountLinesExtension。但是,我在注册扩展时遇到了问题。

我正在使用 Windows 10 Pro,版本 1803。

我正在使用 ShellExView 来观察哪个 DLL 已注册到我的 Explorer.exe。

我正在使用“VS2017 的开发人员命令提示符”(具有管理员权限)来注册我的 C# DLL。

如果我使用“regasm CountLinesExtension.dll /codebase”命令,ShellExView 不会显示任何已注册的 DLL。此外,Windows 资源管理器上下文菜单没有我的扩展。

如果我使用 64 位版本的 regasm:'“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe”CountLinesExtension.dll /codebase',DLL 注册,但其路径不正确。

壳牌

“C:\WINDOWS\system32\C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/CountLinesExtension/v4.0_1.0.0.0__3abfeebd1a832fed/CountLinesExtension.dll”

这张动图很好地解释了情况

如您所见,文件大小为 0。因为路径上没有文件。

如果我使用不带“/codebase”参数的 64 位版本的 regasm:'“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe”CountLinesExtension.dll'

DLL 注册到给定路径:

“C:\WINDOWS\assembly\GAC_MSIL\CountLinesExtension\1.0.0.0__3abfeebd1a832fed\CountLinesExtension.dll”

但是,该路径上仍然没有文件。文件大小仍然为零。

如果我手动创建路径,并将相关 DLL 复制到给定路径,则 DLL 会正确注册。

可以看到,DLL 注册到了正确的路径上

但是,Windows 资源管理器仍然没有在上下文菜单中显示我的扩展。我尝试了给定类型的文件(.txt、.log 等...),但是没有用。

另外,我创建了另一个简单的 SharpShell ContextMenu 项目,以尝试日志记录。我在代码中添加了信息日志和错误日志。

https://github.com/dwmkerr/sharpshell/blob/master/docs/logging/logging.md

我将 SharpShell regedit 日志值设置为 7,这意味着记录到文件、Windows 事件查看器和 DebugView。

日志档案

但是,日志文件(和 Windows 事件查看器)只有注册和注销日志。如果 DLL 安装正确,我的信息和错误日志应该可以在日志文件中看到。

所以,我放弃了SharpShell,并尝试原始方法进行shell扩展开发。

我从这个 URL 下载了 CSShellExtContextMenuHandler: https://www.codeproject.com/Articles/174369/How-to-Write-Windows-Shell-Extension-with-NET-Lang

并编译。应用了相同的 RegAsm 步骤。但是,结果是一样的。如果我将 DLL 复制到 C:\Windows\System32{bla bla...} 中的给定路径。DLL 会根据 ShellExView 加载到 Windows 资源管理器,但是从不起作用。

因此,我放弃了 C#,从这个 URL 下载了一个 C++ 上下文菜单处理程序示例:

https://code.msdn.microsoft.com/windowsapps/CppShellExtContextMenuHandl-410a709a

编译了一个 64 位 DLL。以管理员权限打开“Windows CMD”,并使用“regsvr32 CppShellExtContextMenuHandler.dll”命令进行注册。显示一个消息框,通知我 DLL 注册成功。

我可以在 ShellExView 中看到 DLL,看起来它已正确加载。但是,我在 Windows 资源管理器上下文菜单中看不到任何内容。

因此,我需要帮助来正确注册(或编译)DLL。

感谢您的帮助。

相关内容