【问题标题】:Accessing Powershell COM Object in C#?在 C# 中访问 Powershell COM 对象?
【发布时间】:2013-01-14 01:16:48
【问题描述】:

我需要将 Powershell 脚本转换为 C#。

Powershell 脚本访问 Windows 部署服务 COM 对象:

$wdsObject = New-Object -ComObject WdsMgmt.WdsManager
$wdsServer = $wdsObject.getWdsServer("Localhost")
[...]

是否可以在 C# 中访问这些 COM 对象?

我在 Visual C# 中找不到相应的 COM 对象引用。 我尝试将 System32 中的 wdsmgmt.dll 添加为 C# 项目中的引用,但这不起作用。否则我很困惑。

编辑:

对评论 1 的回答: Best way to access COM objects from C#

相关的 COM 对象未在参考文献中列出。我已经浏览了大约 5 次列表,以确保我不会错过它。 有没有办法让 COM 对象出现在 C# 的 COM 引用列表中?

对评论 2 的回答(什么不起作用): 尝试添加 wdsmgmt.dll 显示如下错误:

Please make sure the file is accessible, and that it is a valid assembly or COM component.

该文件是可访问的,但在 C# 眼中它似乎不是一个有效的 COM 组件。

在注册表中搜索 WdsMgmt 显示 COM 对象至少以某种方式存在:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CD583E47-B079-4025-A799-5F951D016D3E}

也许改写后的问题是:

当我知道它在 Powershell 中的名称时,如何将 COM 对象引用添加到 C#?

【问题讨论】:

标签: c# powershell com-interop comobject


【解决方案1】:

您可以使用dynamic 直接镜像PowerShell 所做的事情,并通过ProgId 创建实例。例如,请参阅https://stackoverflow.com/a/3251325/8446

【讨论】:

  • 这是我需要完成的提示!该应用程序仅在 x64 架构中编译。
【解决方案2】:

您是否尝试过使用TlbImp

创建 COM 类包装器

要让 C# 代码引用 COM 对象和接口,您需要 在 C# 中包含 COM 接口的 .NET Framework 定义 建造。最简单的方法是使用 TlbImp.exe(类型库 Importer),一个包含在 .NET Framework SDK 中的命令行工具。 TlbImp 将 COM 类型库转换为 .NET Framework 元数据 — 有效地创建一个可以从任何地方调用的托管包装器 托管语言。使用 TlbImp 创建的 .NET Framework 元数据可以是 通过 /R 编译器选项包含在 C# 构建中。如果您正在使用 Visual Studio 开发环境,只需要添加一个 引用 COM 类型库并为您完成转换 自动。

以下是有关此互操作工具的更多信息:

Tlbimp.exe (Type Library Importer)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2011-07-25
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多