首页 > 解决方案 > 创建 visio 文件可以从控制台应用程序工作,但不能从 Windows 服务工作

问题描述

我有以下打开 visio 文件的代码:

Microsoft.Office.Interop.Visio.Document vXfuncStencil = null;
var app = new Microsoft.Office.Interop.Visio.Application();
vXfuncStencil = app.Documents.OpenEx(@"C:\Program Files\Microsoft Office\Office16\Visio Content\1033\XFUNC_U.VSSX", 4);
app.Quit();

它在控制台应用程序中运行良好,但在我通过 Windows 服务运行时出现以下错误:

System.Runtime.InteropServices.COMException (0x86DB03E7): An exception occurred. at Microsoft.Office.Interop.Visio.DocumentsClass.OpenEx(String FileName, Int16 Flags) 

一些注意事项:

  1. 我们在特定服务帐户下作为 Windows 服务运行我们的工作(也在服务器上添加为本地管理员)
  2. 我们找不到有关错误的任何信息:0x86DB03E7。
  3. 我们在 Azure VM 中运行代码 - windows server 2019(64 位)、visio 2016 64 位
  4. 相同的应用程序在我们的本地服务器上运行良好。我们正在迁移到 Azure 服务器,但它无法正常工作。我们比较了两台服务器上的所有设置。

有谁知道错误 0x86DB03E7 是关于什么的?为什么它不能从 Windows 服务工作?

标签: c#windows-servicesvisio

解决方案


在进行 DCOM 配置更改后,它可以在 Windows server 2012 上运行:

  • 在服务器上安装visio
  • 开始 > 运行 > dcomcnfg
  • 导航到组件服务 > 计算机 > 我的电脑 > DCOM 配置
  • 找到 Microsoft Visio 2003-2010 绘图
  • 右键单击>属性
  • 在安全选项卡上:选择启动和激活权限下的自定义,然后单击编辑...</li>
  • 添加 [您的用户] 并分配本地启动和本地激活权限
  • 在身份选项卡上,确保进程设置为以“此用户:”身份运行,并输入 [您的用户] 帐户和密码。

对于 Windows server 2019:我们咨询了 Microsoft 支持,他们说:“所有当前版本的 Microsoft Office 都经过设计、测试和配置,以作为最终用户产品在客户端工作站上运行。它们采用交互式桌面和用户配置文件。他们确实不提供满足设计为无人值守运行的服务器端组件需求所必需的可重入性或安全性级别。”。

访问https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office了解更多详情。

他们建议使用 Open XML SDK 来创建和操作 visio 文件。有关更多详细信息,请访问https://docs.microsoft.com/en-us/office/client-developer/visio/visio-file-format-reference


推荐阅读