【问题标题】:getactiveObject command fails for windows 8 and windows 10Windows 8 和 Windows 10 的 getactiveObject 命令失败
【发布时间】:2017-09-25 14:53:31
【问题描述】:

我在下面有以下 Powershell 代码,我已将其编译为可执行 (.exe) 文件,并将其打包到 SCCM 中以针对 100 个用户进行推送。我已将 SCCM 包设置为以“以用户身份安装”和 not 以管理员身份运行。该软件包成功地为使用 Windows 7 的用户捕获数据,任何安装了 Windows 8/10 的用户未能捕获我需要的数据。

我做了一个 try/catch 语句并得到了这个错误 - "

使用“1”参数调用“GetActiveObject”的异常:“操作 不可用(来自 HRESULT 的异常:0x800401E3 (MK_E_UNAVAILABLE))"

我试图理解为什么相同的代码可以在 Windows 7 机器上完美运行,但在 Windows 8/10 上却无法运行。有解决办法吗?我想避免使用“New-Object -ComObject 'Outlook.Application'”,因为我不想在后台创建一个新的 Outlook 进程(害怕破坏用户正在运行的 Outlook 会话)。我需要运行 Powershell 代码来捕获活动的 running Outlook 进程。请帮忙。谢谢

$mail = [Runtime.Interopservices.Marshal]::GetActiveObject('Outlook.Application') 

$name = $mail.Application.DefaultProfileName

$name 的输出存储在本地的日志文本文件中。

【问题讨论】:

  • 在项目中我想知道您是否需要将其从 AnyCPU 更改为 x86 或反之亦然`这听起来像是 32 位操作系统与 64 位操作系统的操作系统问题
  • 我们所有的机器都是64位操作系统,我们不部署32位机器。谢谢
  • 如何检查 DLL 的 CopyLocal = 属性是否确保在部署时将其设置为 true。
  • MethodMan,感谢您的回复。不熟悉 DLL 的这个“copylocal=”属性。你能详细说明一下我应该如何确保它设置为“true”吗?
  • 在项目的references 节点中,如果您使用任何第3 方程序集的/dll,只需单击引用节点中的dll 并将该属性从CopyLocal=false 更改为CopyLocal=true这会将 dll 复制到项目的 Bin 目录,而不是在查找/和/或引用 dll 时依赖GAC ..

标签: c# vba powershell outlook sccm


【解决方案1】:

我也有类似的症状。我不知道这是否是您的确切问题,但也许我的解决方案会帮助其他偶然发现此问题的人。

以下MS KB article 提到,Office 应用程序不会在 ROT 中注册自己,直到应用程序失去焦点(这显然是“设计行为”)。如果应用程序没有在 ROT 中注册,GetActiveObject 将返回您指示的错误。

在我的情况下,该脚本在 Windows 7 上运行可靠,但它有时只能在 Windows 8 上运行。出于某种原因,可能与安装的 Office 版本、不同版本的 Internet Explorer(我用来启动Office 应用程序)或可能更改为 Windows 本身,我在 Windows 8 上遇到了不同的默认窗口聚焦行为。只要我在 Windows 8 测试中手动单击 Office 应用程序,脚本就开始工作。

为了解决这个问题,我只是在调用 GetActiveObject 之前插入了对 focus the Office application window 的调用,这使得操作在 Windows 8 上完全可靠。

【讨论】:

    【解决方案2】:

    确保 Outlook 和您的应用在相同的安全上下文中运行 - 两个应用都以提升的权限(“以管理员身份运行”)运行,或者两个应用都没有以管理员身份运行。

    【讨论】:

    • 感谢您的输入 Dmitry,但正如我在原始帖子中提到的那样,我正在成功地将其推向 Windows 7 工作站,并且它正在通过 SCCM“以用户身份安装”。但是由于某种原因,当它也通过 SCCM 作为“以用户身份安装”推送时,它对于 Windows 8/10(完全相同的应用程序)会失败。我正在考虑对导致此问题的 Win 8/10 的 WMF 进行更改。
    • 如果 SCCM 未在相同的安全上下文中运行(即使用户身份相同),您将看到该错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2023-04-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多