vs开发遇到的问题之MSI未能注册模块 xxx.dll。HRESULT -2147024770。请与你的技术支持人员联系。

最近遇到一个让人头大的问题,在vs2022上使用Windows Installer打包的程序有个输出的dll需要注册com组件,在自己电脑上可以使用,但是给其他人使用就会报错 “未能注册模块 xxx.dll。HRESULT -2147024770。请与你的技术支持人员联系。

由于是小白对这方面的知识几乎为零,所以只能在网上寻求方法或者相同的案例。最后从网上得出了以下结论: 

1.缺少运行vs运行环境

        如果是没有安装过vs的电脑,那么大概率会存在这个情况。在官网可以下载对应的环境或下载DirectX_repair软件 一键修复。

最新受支持的 Visual C++ 可再发行程序包下载 | Microsoft Learn

2.输出的dll文件缺少相关的依赖项

3.缺少管理员权限

4.关闭杀毒软件运行

5.dll文件版本问题,64位dll放在了32位操作系统的计算机上

我的排查过程:

        将输出文件属性中的自动注册vsdrfcomselfreg改为标准vsdrfcom再打包msi,安装完msi之后以管理员权限启动cmd.exe去安装的路径下,输入regsvr32 dll文件名手动注册。结果显示如下:

        如果是这种情况,那么大概率是缺少依赖项了, 启动vs自带的developer command prompt,输入指令dumpbin /dependents dll文件名将缺少的依赖项添加上即可(系统自带的dll不需要加)。加上后再次使用regsvr32 dll文件名 手动注册,成功了。

        将输出文件属性的注册改回自动注册vsdrfcomselfreg,重新打包msi。再次安装如果成功了,那么恭喜。但是我仍然是无法注册。启用developer command prompt,输入msiexec /i msi文件名 /l*v 输出的文件名.log(最好带路径不然又得到处找该文件)来查看安装细节。

        导致我失败的其他原因:①代码中SetThreadDpiAwarenessContext函数不支持Windows 2012服务器。可以下载dependencies软件来查看报红dll中的函数是否适用于你电脑的操作系统。②检查打包的msi程序是否包含了发出类似'VERSION.dll' should be excluded because its source file 'C:\Windows\system32\VERSION.dll' is under Windows System File Protection.警告的系统dll,如果包含了,排除或者删除掉重新打包。

        目前我遇到的就是这几个问题,希望能够帮助到萌新朋友们。如果都不能解决,但是可以使用regsvr32手动注册dll,那么还有一种折中的办法:注册属性改为vsdrfcom,然后写一个批处理指令在安装完msi包后去注册dll。再把msi和批处理文件打包成一个自解压exe,设置解压到临时路径,解压时启动批处理文件。(这个方法需要获取管理员权限才能注册dll成功)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值