【问题标题】:The RPC server is unavailable. when calling ManagementScope.ConnectRPC 服务器不可用。调用 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?

标签: c# rpc remote-management


【解决方案1】:

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

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

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

["netapi32.dll"]NetShareGetInfo 

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

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

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

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

【讨论】:

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

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

看看这家伙did是什么。

编辑:

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

【讨论】:

  • 不,我在域中。如果我直接连接到办公室的 LAN,则该代码有效,但每周只有两天。其余时间我通过 VPN 连接进行连接,并且代码在该链接上不起作用。 SC 和 PSEXEC 在这两个地方都可以正常工作,这让我相信存在根本差异 - 但请参阅下面的帖子......
  • 老实说,我遇到了另一个异常,RPC 访问被拒绝,我认为这意味着至少有一些东西可以正常工作,如果我能达到被拒绝的程度。
猜你喜欢
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
相关资源
最近更新 更多