基于IExplorerCommand的右键菜单安装遇.NET相关错误及依赖疑问
问题描述
我正在尝试安装一个基于C++编写、实现IExplorerCommand接口的右键菜单处理程序,安装流程遵循微软SparsePackages示例的说明。除最后一步外,所有步骤均正常执行。当运行用于安装包含右键菜单配置信息的MSIX包的程序时,出现如下致命错误:
发生致命错误。找不到所需的库hostfxr.dll。如果这是自包含应用程序,该库应存在于[C:\Users\Username\Desktop\windows-menu\bin]目录中。如果这是依赖框架的应用程序,请在全局位置[C:\Program Files\dotnet]安装运行时,或使用DOTNET_ROOT环境变量指定运行时位置,或在[HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\InstallLocation]中注册运行时位置。
我使用的是Windows 10系统,请问该错误的成因是什么?如何解决?
更新内容
我将hostfxr.dll文件复制到bin文件夹后,程序输出如下内容:
架构:x64框架:'Microsoft.NETCore.App',版本'3.1.0'(x64).NET位置:C:\Users\Username\Desktop\windows-menu\bin\ 未找到任何框架。
请问安装此类右键菜单真的需要依赖.NET吗?若使用该程序的用户电脑未安装.NET环境,该如何处理?
问题解答
初始错误的成因与解决方法
- 成因:你运行的MSIX包安装程序是依赖.NET Core 3.1的应用,
hostfxr.dll是.NET运行时的核心引导库,你的系统未全局安装对应版本的.NET Core运行时,且该安装程序并非自包含发布版本,因此无法找到所需依赖库。 - 解决方法:
- 安装.NET Core 3.1 x64运行时:下载对应版本的官方安装包完成安装,系统会自动注册运行时路径,安装程序即可正常调用依赖。
- 使用自包含版本的安装程序:重新获取或构建该安装工具的自包含发布版本,这类版本会将.NET运行时与程序打包在一起,无需系统提前安装.NET环境。
更新后问题的说明与解决方案
- 是否必须依赖.NET:右键菜单处理程序本身是C++实现的
IExplorerCommand接口,不需要.NET依赖;但你用来安装MSIX包的工具是基于.NET开发的,因此这个安装工具需要.NET环境。 - 无.NET环境的用户处理方案:
- 采用自包含安装工具:将安装工具打包为自包含版本,用户无需提前安装.NET,直接运行即可完成MSIX包的安装。
- 替换为原生安装方式:不使用这个.NET编写的安装工具,改用Windows原生工具(比如PowerShell的
Add-AppxPackage命令)手动安装MSIX包,完全不需要依赖.NET环境。
内容的提问来源于stack exchange,提问作者Joe J
相关产品推荐
相关产品推荐

