通过交互式用户的 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\DesktopC) 等待它...步骤 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交互以提升性能