RPC 服务器不可用。调用 ManagementScope.Connect 时

Posted

技术标签:

【中文标题】RPC 服务器不可用。调用 ManagementScope.Connect 时【英文标题】:The RPC server is unavailable. when calling ManagementScope.Connect 【发布时间】:2010-11-21 23:03:03 【问题描述】:

我需要远程创建一个服务,我不想跳出一个命令并运行“sc \remotemachine create ......”并希望在 C# 代码中完成它。

但是,在运行代码时,即使 sc 命令运行良好并因此正在管理远程系统,ManagementScope.Connect 调用会引发异常,并显示“RPC 服务器不可用”。

执行此操作的代码的 sn-p 是

string machineName = "othermachine";
string path = string.Format(@"\\0\root\cimv2", machineName);
ManagementScope scope = new ManagementScope(path);
scope.Connect();

因为这是旅程的第一步,所以我有点不知道下一步该去哪里。 sc 命令有效,那么它有什么不同(除了不使用 .net 库 - 也许我需要更努力地使用 winapi?)

谢谢

【问题讨论】:

完整性检查:您是否尝试仅连接到 othermachine,而不是 root/cimv2? 【参考方案1】:

在考虑了一会儿之后,看到分配给此任务的时间被侵蚀掉了,我取出了旧的 WIN32 api 文档并 [DllImport] 调用了我需要以“老式方式”执行此操作的调用。作为一个老 C 狗,我曾经熟悉这些调用的方法,令人惊讶的是,即使在使用托管库好几年之后,它仍然能恢复多少。

我需要做的是能够创建一个服务、启动它、做有用的工作、停止它并删除它。创建、启动、停止和删除都是机制,我想专注于活动的“做有用的工作”部分。

我首先将服务的 exe 复制到 ADMIN$ 共享并验证了到该共享的本地路径(我们的服务器管理员无法告知!)。为此,我调用

["netapi32.dll"]NetShareGetInfo 

然后我将以下内容与 advapi32.dll 一起使用

OpenSCManager 创建服务 启动服务 OpenService(当我想停止并删除它时 - 不要保持手柄打开,因为这可能需要一段时间才能保持清洁以保持独立) 控制服务 查询服务状态 关闭服务句柄

即使通过 *** 连接,这一切都可以正常工作。

我只能猜测托管 api 正在尝试做的事情远远超出我的实际需要 - 使用托管 api 和 Windows api 所花费的时间差异很大,并且不能保证托管 api 会得到通过这不是一个合适的前进方式。

【讨论】:

很好地考虑了解决方法。这种情况改变了整个问题,现在这是一个 *** 问题...... 直到我昨天在办公室并且我的代码正常工作后才真正变得清晰起来,而前一天晚上却没有。唯一不同的是瞻博网络 *** 连接。【参考方案2】:

显然,来自 MSDN 的股票代码并没有描绘出整个画面。我得到的结果和你一样。

看看这家伙did是什么。

编辑:

我相信您是在工作组而不是域上尝试它,对吧?这就是诀窍,工作组需要更多的工作才能完成。上面的链接似乎有一个解决方法。今晚我会在家再试一次。

【讨论】:

不,我在域中。如果我直接连接到办公室的 LAN,则该代码有效,但每周只有两天。其余时间我通过 *** 连接进行连接,并且代码在该链接上不起作用。 SC 和 PSEXEC 在这两个地方都可以正常工作,这让我相信存在根本差异 - 但请参阅下面的帖子...... 老实说,我遇到了另一个异常,RPC 访问被拒绝,我认为这意味着至少有一些东西可以正常工作,如果我能达到被拒绝的程度。

以上是关于RPC 服务器不可用。调用 ManagementScope.Connect 时的主要内容,如果未能解决你的问题,请参考以下文章

Powershell - 调用远程 WMI 对象 - RPC 错误 HRESULT:0x800706BA(RPC 服务器不可用)

rpc服务器不可用 如何修复Windows上的RPC服务器不可用错误

RPC服务器是啥

请问RPC服务器不可用是啥意思?

UWP 后台音频失败,因为 RPC 服务器不可用

什么是RPC服务