我尝试开发一个 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 会正确注册。
但是,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。
感谢您的帮助。