如何替换.appx/.msix/.msixbundle包中的.winmd并让应用生效?
问题:无源码替换嵌入在DLL中的WinMD文件
我负责的SDK(mysdk.winmd)被客户集成后出现问题,对方提供了其.appx安装包。为排查问题,我尝试将包中的SDK替换为调试版本,但遇到了加载异常:
已执行的操作
- 用Advanced Installer打开目标.appx文件
- 配置信任的数字签名证书,修改包的CN以匹配证书
- 更新应用版本号
- 将包内独立的旧
mysdk.winmd替换为调试版本文件 - 重新生成.msix包并完成安装
异常现象
安装后确认包内的独立mysdk.winmd已成功替换,但运行客户应用时,程序仍加载旧版本的SDK。将新生成的.msix改为ZIP解压后,可见新的mysdk.winmd文件,且AppxBlockMap.xml已更新;重启机器后问题依旧。
问题根源
进一步排查发现,客户的.appx/msix包中,mysdk.winmd不仅以独立文件存在,还被嵌入到Customer.dll中,应用实际加载的是DLL内部嵌入的旧版本SDK。
现寻求无源码情况下,重新生成包含新mysdk.winmd的Customer.dll的可行方法。
内容的提问来源于stack exchange,提问作者Greg Thatcher
相关产品推荐
相关产品推荐

