通过交互式用户的 Excel COM 自动化在用户注销时停止工作

Posted

技术标签:

【中文标题】通过交互式用户的 Excel COM 自动化在用户注销时停止工作【英文标题】:Excel COM automation via interactive user stops working when user logs off 【发布时间】:2011-05-13 04:29:04 【问题描述】:

我开发了一个服务器应用程序,它使用 Excel 2007 COM 自动化来转换一些 xls 文件。它作为 Windows Datacenter 实例上的服务启动,在其自己的用户下运行,我必须更改 DCOM 安全设置(“作为交互式用户启动”)才能使其工作。

问题是,当我(通过 RDP)注销时,它停止工作。我登录,它又可以工作了。

有人遇到过同样的问题吗?

【问题讨论】:

【参考方案1】:

好的,所以我无法让 Excel 在没有交互式用户的情况下运行,再多的 DCOMCNFG 诡计也行不通。所以我只是为运行服务的用户配置了自动登录(有关说明,请参阅http://support.microsoft.com/kb/315231)。

这具有在服务器启动时,该用户将作为交互式控制台会话登录的效果。与 RDP 会话不同,这是永久性的,让 Excel 开心。

对不得不做类似事情的穷人的其他提示:

创建文件夹 C:\Windows\System32[或 SysWOW64]\config\systemprofile\Desktop 确保为运行服务的用户配置了默认打印机 更改 Excel 的 DCOMCNFG 设置(mmc -32,添加“组件服务”)以使用交互式帐户运行 更改全局 DCOM 默认值以允许运行该服务的用户进行本地访问、本地启动和本地激活

【讨论】:

您的意思是执行您提到的“其他提示”模拟始终在线的交互式用户吗? 使用自动登录存在安全风险。您如何以这种方式保护您的服务器?【参考方案2】:

遇到过这个问题,发现答案居然在DCOM Configuration.

我执行了以下操作来解决此问题:

    打开 Excel DCOM 属性 转到Identity 标签 选择This User 输入有权访问 Excel 的人员的凭据

您可能需要转到Security 标签并确保您在上面指定的用户具有适当的权限。

完成此操作后,我能够在仍然使用 Excel COM 自动化库的同时注销服务器。

【讨论】:

【参考方案3】:

服务器端:

A) 将“交互式用户”切换为“此用户”

B) “此用户”仅在创建这些文件夹后才有效:

C:\Windows\SysWOW64\config\systemprofile\Desktop C:\Windows\System32\config\systemprofile\Desktop

C) 等待它...步骤 B) 触发 Windows 自动创建:

C:\Users\Default\Desktop

请注意,“交互式用户”的定义是搭载在服务器上的任何活动登录用户。因此,当服务器上没有用户处于活动状态时,无法启动 MS Office。

也就是说,对我来说,该解决方案是已经提出的解决方案的混合体。我在 Win 2012R2 上使用了 Office 2013 (x86)。我的问题是 Word(使用 WordToPDF)。

步骤 B 的详细信息:

登录到服务器 > 开始 > 运行 DCOMCNFG.EXE(启动组件服务)> 控制台根目录 > 组件服务 > 计算机 > 我的电脑 > DCOM 配置... 滚动到“Microsoft Word 97 - 2003 文档”或“Microsoft Excel 应用程序”(...即您需要启动的任何 MS Office 软件)... 右键单击它并选择“属性”> 身份选项卡> 选择“此用户”> 为某些有权访问服务器上的 MS Office 的用户输入凭据。 (我使用了具有管理员权限的用户。)

步骤 C 的详细信息:

等待时间从 5 分钟到通宵不等。或者,手动创建此文件夹(如果该文件夹不存在并且您急于完成测试)。

【讨论】:

【参考方案4】:

有一个名为 Excel Services 的东西,它应该可以使用 SharePoint 将 Excel 作为服务运行,这将允许它在无人值守的情况下运行而无需任何人登录。

【讨论】:

您好乔尔,感谢您的回复! :) 当我调试这个时,我实际上在想你,注意到 Excel 比 Word 或 Powerpoint 更难自动化,需要交互式用户登录才能操作。你可能知道为什么,在内部工作过。我知道 Sharepoint 提供的 MS Office 服务,但不幸的是,我正在为 SharePoint 的直接竞争对手开发此服务。 ^_^ 我将在下面发布我找到的解决方案。干杯!【参考方案5】:

如果运行 EXCEL 的帐户是管理员,那么这将起作用:

对于 64 位 (x64),创建此文件夹:C:\Windows\SysWOW64\config\systemprofile\Desktop 对于 32 位 (x86),创建此文件夹:C:\Windows\System32\config\systemprofile\Desktop 否则要解决此问题,请按以下步骤操作:

    以管理员身份登录您的服务器 转到“开始”->“运行”并输入“MMC comexp.msc /32” 转到 Microsoft Excel 应用程序的属性,在身份下,将其从启动用户(默认设置)更改为交互式用户。 转到 Microsoft Office Excel 2007 工作簿的属性,在身份下,将其从启动用户更改为交互式用户(默认设置)。 转到 Microsoft Excel 应用程序的安全选项卡并选择自定义 “ Launch and Activation Permissions” 并为其添加 ACCOUNT(EXCEL 在其下运行)并赋予其“本地启动”和“本地激活”权限 转到 Microsoft Office Excel 2007 工作簿的安全选项卡并选择自定义 " Access Permissions " 并为其添加 ACCOUNT (EXCEL 在其下运行) 并赋予其 "Local Access" 权限

【讨论】:

以上是关于通过交互式用户的 Excel COM 自动化在用户注销时停止工作的主要内容,如果未能解决你的问题,请参考以下文章

Excel催化剂开源第16波-VSTO开发之脱离传统COM交互以提升性能

在用户与页面交互之前,JavaScript 无法读取 Chrome 的自动填充密码字段

自我更新应用

项目需求分析与生产背景

免交互

个人永久性免费-Excel催化剂功能第19波-Excel与Sqlserver零门槛交互-查询篇