创建 visio 文件可从控制台应用工作,但不能从 Windows 服务工作



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

Microsoft.Office.Interop.Visio.Document vXfuncStencil = null;
var app = new Microsoft.Office.Interop.Visio.Application();
vXfuncStencil = app.Documents.OpenEx(@"C:Program FilesMicrosoft OfficeOffice16Visio Content1033XFUNC_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服务工作?

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

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

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

有关更多详细信息,请访问 https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office。

他们建议使用Open XML SDK来创建和操作visio文件。请访问 https://learn.microsoft.com/en-us/office/client-developer/visio/visio-file-format-reference 了解更多详情。

如本文所述,Microsoft Office 应用程序在 Windows 服务的上下文中运行时可能会遇到问题。许多操作根本行不通。

若要有希望启动 Visio,必须在"常规"Windows 帐户中运行服务,在该帐户中,已安装 Visio 并且可以正常/交互方式启动它。如果您从未在那里安装 Visio,则特定服务帐户是不够的。

要使 Visio 作为 Windows 服务运行(在后台(,请确保文件夹"桌面"和"文档"存在于:

C:\Windows\sysWOW64\config\systemprofile

C:\Windows\system32\config\systemprofile

相关内容

最新更新