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

时间:2010-11-21 23:03:04

标签: c# rpc remote-management

我需要远程创建服务,而不是突破命令并运行“sc \ remotemachine create ......”并希望在C#代码中执行此操作。

但是,在运行代码时,即使sc命令工作得非常愉快,因此管理远程系统,ManagementScope.Connect调用也会抛出“RPC服务器不可用”的异常。

执行此操作的代码片段是

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

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

由于

2 个答案:

答案 0 :(得分:2)

经过一段时间的思考,看到分配给这个任务的时间被淘汰了,我得到了旧的WIN32 api文档,[DllImport]了解了我需要这样做的电话" old老式的方式"。作为一个老C狗,我曾经知道我绕过这些电话的方式,即使在使用托管库几年之后,也会有多少回归。

我需要做的是能够创建一个servcie,启动它,做有用的工作,停止并删除它。创建,启动,停止和删除是机制,我想集中精力做有用的工作"活动的一部分。

我首先将服务的exe复制到ADMIN $共享并验证了本地路径(我们的服务器管理员没有说明!)。要做到这一点,我打电话

["netapi32.dll"]NetShareGetInfo 

然后我从advapi32.dll

使用了以下内容
  • OpenSCManager
  • 的CreateService
  • StartService
  • OpenService(当我想要停止并删除它时 - 不要保持手柄处于打开状态,因为这可能需要一段时间才能保持手柄的自我控制)
  • ControlService
  • QueryServiceStatus
  • CloseServiceHandle

这一切甚至可以通过VPN连接工作。

我只能猜测托管api正在尝试做的远远超过我实际需要的时间 - 使用托管api和Windows api所花费的时间差异相当大,并且无法保证托管api将获得通过它不是适合前进的方式。

答案 1 :(得分:0)

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

查看这个人did

编辑:

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