综合

msopwordaddin弹窗安装

时间:2010-12-5 17:23:32  作者:娱乐   来源:时尚  查看:  评论:0
内容摘要:双击 .vsto 文件,弹窗一闪而过,然后 Word 里什么都没出现。这事我遇到过不下十次,每次都是同一个原因——加载项被 Word 的信任机制拦了。 MSOP 的全称是 Microsoft Offi

双击 .vsto 文件,窗安弹窗一闪而过,窗安然后 Word 里什么都没出现。窗安这事我遇到过不下十次,窗安每次都是窗安同一个原因——加载项被 Word 的信任机制拦了。

MSOP 的窗安全称是 Microsoft Office 解决方案的 Word Add-in,它跟普通的窗安 COM 加载项不一样。VSTO 部署的窗安加载项在安装时会往注册表写一堆键值,同时把清单文件塞到 ClickOnce 缓存目录里。窗安Word 启动时读取这些注册表项,窗安找到清单,窗安再决定加不加载。窗安问题出在中间某一步断了。窗安

弹窗到底弹的窗安是什么

安装 MSOP Word Add-in 时最常见的弹窗有两种。一种是窗安“此应用程序中的自定义功能将不起作用,因为用于创建此应用程序的运行时版本已损坏或已被禁用”,另一种是“无法加载文件或程序集”。第一种通常指向 VSTO 运行时本身出了问题,第二种是依赖项缺失或版本对不上。

我见过一个典型案例:开发机上是 .NET Framework 4.7.2,用户机上是 4.6.1,加载项编译时引用了 4.7.2 才有的 System.ValueTuple,部署过去直接炸。弹窗只给一句“无法加载”,根本不告诉你是哪个 DLL 缺了。这时候得去事件查看器里翻,Windows 日志 → 应用程序,找来源为 VSTO 4.0 的错误条目,里面才有完整的 Fusion 日志。

注册表里那几个关键键

Word 加载项的注册表路径在 HKCU\Software\Microsoft\Office\Word\Addins\ 下面,每个加载项一个子键。里面有三个值必须对:Manifest 指向 .vsto 清单文件的完整路径,LoadBehavior 决定加载时机,Description 随便写但别留空。

LoadBehavior 这个 DWORD 值最容易出幺蛾子。正常应该是 3,表示启动时加载。如果变成 2,Word 会把它标记为“未加载”,下次启动直接跳过。变成 9 或者 10 更麻烦,那是 Word 自己把加载项禁用了,通常因为上次启动时加载项崩溃过。手动改回 3 不一定管用,Word 会检测到崩溃记录然后再次禁用。得先把 HKCU\Software\Microsoft\Office\Word\Resiliency\DisabledItems 下面那个二进制值删掉。

ClickOnce 缓存的坑

MSOP 加载项的清单文件实际存放在 %LocalAppData%\Apps\2.0\ 下面,路径是一串哈希值,肉眼根本看不出对应哪个应用。安装时如果用户没有本地管理员权限,ClickOnce 可能只把文件释放到临时目录,重启后临时目录被清理,清单就找不到了。下次启动 Word 时注册表里的 Manifest 路径指向一个不存在的文件,弹窗报错。

解决办法是用 mage.exe 重新签名清单,或者干脆改用 MSI 打包部署。VSTO 的 ClickOnce 部署在域环境里配合组策略还行,散装机器上装十台有三台会出问题。我现在的习惯是直接用 WiX 做 MSI,把清单文件和依赖 DLL 一起塞进去,安装时写注册表,省掉 ClickOnce 那一层玄学。

一个容易被忽略的细节

Word 的位数必须和加载项匹配。64 位 Word 加载不了 32 位编译的 VSTO 加载项,反过来也一样。弹窗不会告诉你这个,只会说“加载失败”。查 Word 位数很简单,文件 → 账户 → 关于 Word,第一行就写着。开发时如果用的是 AnyCPU 编译,在 64 位系统上默认跑 64 位,但 VSTO 的引导程序 VSTOLoader.dll 有位数区分,注册表里 InprocServer32 指向的路径不对就会静默失败。

排查顺序建议这样:先看事件查看器里的 VSTO 错误日志,确认是加载失败还是运行时缺失;然后检查注册表里 Manifest 路径是否有效;再确认 LoadBehavior 和 DisabledItems;最后核对位数和 .NET 版本。四步走完,九成弹窗问题都能定位。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap