【发布时间】:2016-06-29 19:55:21
【问题描述】:
详情
- 加载项类型:VSTO (VB.Net)
- Word 版本:2013
症状
当我在插件的Startup 事件期间尝试将 VBA 模块注入用户的Normal.dotm 模板时,即使勾选了该选项,我也会收到VBA project is not trusted 错误。当我尝试从模板中获取 VBProject 对象时会发生这种情况:
Private Sub ThisAddIn_Startup() Handles Me.Startup
Dim template as Word.Template = GetNormalTemplate()
If template IsNot nothing Then
Dim vbProj = template.VBProject 'Error thrown here
End If
End Sub
只有在勾选General 选项Show the start screen when this application starts 时才会发生这种情况。
出于某种原因,即使在 splash 屏幕期间加载了普通模板,但在您实际显示文档之前,VBProject 在 start 屏幕上不可用(空白或其他)。
结果
我设法通过在WindowActivate 事件第一次触发而不是在加载项的Startup 事件期间运行代码来实现我的目标:
Property hasInjectedVba As Boolean = False
Private Sub WindowHasActivated() Handles Application.WindowActivate
If Not hasInjectedVba Then
Try
injectVba()
hasInjectedVba = True
Catch ex As Exception
'handle the something that went wrong
End Try
End If
End Sub
总结
如果您尝试安全地执行此操作,Cindy 提出了一些非常好的观点,最重要的是 The security measure not allowing programmatic access to VB projects can remain in-place 如果您使用插件模板 - 这完全避免了这个问题。
【问题讨论】:
-
不太清楚,所以请仔细检查:问题源于更新,“信任访问”没有保持检查的事实?这是公司/网络环境?您是否与网络管理员核对过组策略或类似的东西是否强制执行不信任 VBA 项目?如果我是网络管理员,我当然不会允许这样做——这是一个重大的安全漏洞。您是否考虑过将 VBA 代码作为 VBA 模板分发,您的加载项可以加载为“模板加载项”?
-
不,它一直在检查 - 我最初遇到了这个问题,我检查过没有 GP(组策略)更改它,没有。就在我离开工作之前,它似乎缩小到了在后台视图中打开单词的用户(我的设置为打开到与以前版本一样的空白文档)我正在注入normal.dotm 也是,所以可能是它当时没有加载,但我收到了受信任的错误消息。
-
使用新信息将您的问题发送给edit 是个好主意。而且,是的,我怀疑没有加载 Normal.dotm 可能是一个问题。错误可能只是在无法访问时触发,无论原因如何。我坚持我的建议,即提供一个加载项模板,而不是通过 VBE 访问 Normal.dotm :-)
-
嘿 Cindy,是的,我刚回来读了一遍,现在我回家了,老实说,它可能需要重写 - 我肯定会接受其他路线的建议,请耐心等待我会读当我在健身房后回到家并更新我的问题时 - 谢谢:)
-
没问题 - 我很快就会离线过夜,所以至少 12 小时,也许 18 小时内看不到任何新内容。