首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >New-Object -ComObject inconsistency

New-Object -ComObject inconsistency
EN

Stack Overflow用户
提问于 2021-06-14 21:13:54
回答 2查看 83关注 0票数 1

我想启动MS Outlook以实现自动化。所以我输入:

代码语言:javascript
复制
$Outlook = New-Object -ComObject Outlook.Application

但是,有时进程会启动,但PowerShell会抛出错误:

代码语言:javascript
复制
New-Object : Creating an instance of the COM component with CLSID {0006F03A-0000-0000-C000-000000000046} from the IClassFactory failed due to the following error: 800100
01 Call was rejected by callee. (Exception from HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)).
At line:1 char:12
+ $Outlook = New-Object -ComObject Outlook.Application

什么意思?如何始终如一地创建com对象而不出错?这一行总是有效的:

代码语言:javascript
复制
Start-Process "C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE"

但是,连接到它会有一个问题:

代码语言:javascript
复制
#sleep 30
$Outlook = [Runtime.InteropServices.Marshal]::GetActiveObject("Outlook.Application")

我需要在代码中设置睡眠以等待MS Outlook启动和运行。否则PowerShell会再次抛出错误。

EN

回答 2

Stack Overflow用户

发布于 2021-06-14 21:40:55

目前还不清楚代码在何时何地运行。MS声明如下:

Office目前不建议也不支持从任何无人参与的、非交互的客户端应用程序或组件(包括

、ASP.NET、DCOM和NT服务)自动运行Microsoft Office应用程序,因为当Office在此环境中运行时,可能会表现出不稳定的行为和/或死锁。如果要生成在服务器端上下文中运行的解决方案,则应尝试使用已设置为可无人参与执行的安全组件。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果从服务器端解决方案使用Office应用程序,则该应用程序将缺少成功运行所需的许多功能。此外,您将在整体解决方案的稳定性方面承担风险。

Considerations for server-side Automation of Office文章中阅读更多关于这方面的内容。如果仅处理Exchange帐户,则可以考虑使用Exchange web服务,有关详细信息,请参阅Start using web services in Exchange

此外,当您尝试处理来自辅助线程的OOM对象时,Office应用程序可能会给出异常。你可能会发现RPC_E_CALL_REJECTED 0x80010001 on Outlook new Mail creation from Thread的帖子很有帮助。

票数 2
EN

Stack Overflow用户

发布于 2021-06-15 01:40:47

RPC_E_CALL_REJECTED很可能表示其中一个进程正在以提升的权限运行(以管理员身份运行)。COM系统拒绝封送在不同安全上下文中运行的进程之间的调用。

确保两个应用程序都没有提升,或者都没有提升。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67970901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档