我想启动MS Outlook以实现自动化。所以我输入:
$Outlook = New-Object -ComObject Outlook.Application但是,有时进程会启动,但PowerShell会抛出错误:
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对象而不出错?这一行总是有效的:
Start-Process "C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE"但是,连接到它会有一个问题:
#sleep 30
$Outlook = [Runtime.InteropServices.Marshal]::GetActiveObject("Outlook.Application")我需要在代码中设置睡眠以等待MS Outlook启动和运行。否则PowerShell会再次抛出错误。
发布于 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的帖子很有帮助。
发布于 2021-06-15 01:40:47
RPC_E_CALL_REJECTED很可能表示其中一个进程正在以提升的权限运行(以管理员身份运行)。COM系统拒绝封送在不同安全上下文中运行的进程之间的调用。
确保两个应用程序都没有提升,或者都没有提升。
https://stackoverflow.com/questions/67970901
复制相似问题