Shell 打包的 win32 桌面应用程序中的扩展 DLL 在某些系统上无法运行
Shell extension DLL in a packaged win32 desktop app not working on some systems
参考:将打包的桌面应用程序与文件资源管理器集成 https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/integrate-packaged-app-with-file-explorer
我正在使用类似于上述文章中提到的 github 存储库的示例代码来获取我自己的上下文菜单项和右键单击任何文件夹时的操作。
https://github.com/microsoft/Windows-AppConsult-Samples-DesktopBridge/tree/main/Docs-ContextMenuSample
这在我使用 Windows 11 的笔记本电脑上运行良好。但是,在 Hyper-V 计算机中的另一个 Windows 11 副本上安装相同的应用程序时无法运行。两个 Windows 系统都更新为同一版本。两个系统上都安装了相同的 AppX,它可以在一个系统上运行,但不能在另一个系统上运行。
我将调试日志记录在DLL中,发现当我在运行系统中右键单击一个文件夹时会调用DLLMain。而即使是 DLLMain 也不会在故障系统上调用。这意味着安装 Appx 时 DLL 未在该系统上注册。完全相同的情况发生在 Windows 10 系统上,它是一个 hyper-v 虚拟机。
问题:是否有某种设置阻止从打包的应用程序中注册上下文菜单 Dll?只有这样才能解释在一个系统上工作而不在另一个系统上工作。
另一个想法是查看日志的事件查看器。但是去哪里看呢?
更新: 最后发现需要以下DLL:
VCRUNTIME140.dll 和 VCRUNTIME140_1.dll.
这意味着它需要一些包依赖才能获得上述 DLL。尝试了以下方法:
在 appx 清单中添加了 PackageDependency:
<PackageDependency Name="Microsoft.VCLibs.140.00.UWPDesktop" MinVersion="14.0.24217.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
但是并没有真正解决问题
最后,我在 Appx 中将 ProcessorArchitecture 用作 x86,但 shell dll 必须是 X64。我将 ProcessorArchitecture 更改为 x64,它开始工作了。
参考:将打包的桌面应用程序与文件资源管理器集成 https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/integrate-packaged-app-with-file-explorer
我正在使用类似于上述文章中提到的 github 存储库的示例代码来获取我自己的上下文菜单项和右键单击任何文件夹时的操作。 https://github.com/microsoft/Windows-AppConsult-Samples-DesktopBridge/tree/main/Docs-ContextMenuSample
这在我使用 Windows 11 的笔记本电脑上运行良好。但是,在 Hyper-V 计算机中的另一个 Windows 11 副本上安装相同的应用程序时无法运行。两个 Windows 系统都更新为同一版本。两个系统上都安装了相同的 AppX,它可以在一个系统上运行,但不能在另一个系统上运行。
我将调试日志记录在DLL中,发现当我在运行系统中右键单击一个文件夹时会调用DLLMain。而即使是 DLLMain 也不会在故障系统上调用。这意味着安装 Appx 时 DLL 未在该系统上注册。完全相同的情况发生在 Windows 10 系统上,它是一个 hyper-v 虚拟机。
问题:是否有某种设置阻止从打包的应用程序中注册上下文菜单 Dll?只有这样才能解释在一个系统上工作而不在另一个系统上工作。
另一个想法是查看日志的事件查看器。但是去哪里看呢?
更新: 最后发现需要以下DLL: VCRUNTIME140.dll 和 VCRUNTIME140_1.dll.
这意味着它需要一些包依赖才能获得上述 DLL。尝试了以下方法:
在 appx 清单中添加了 PackageDependency:
<PackageDependency Name="Microsoft.VCLibs.140.00.UWPDesktop" MinVersion="14.0.24217.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
但是并没有真正解决问题
最后,我在 Appx 中将 ProcessorArchitecture 用作 x86,但 shell dll 必须是 X64。我将 ProcessorArchitecture 更改为 x64,它开始工作了。