代码之家  ›  专栏  ›  技术社区  ›  Alan Mullett

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

  •  1
  • Alan Mullett  · 技术社区  · 14 年前

    我需要远程创建一个服务,而不想中断到一个命令并运行“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 回复  |  直到 14 年前
        1
  •  2
  •   Alan Mullett    14 年前

    在考虑了一下这个问题之后,我看到分配给这个任务的时间被浪费掉了,于是我拿出了旧的WIN32 api文档,并[DllImport]用“老式的方法”调用了这个任务。作为一个老C狗,我曾经知道如何处理这些调用,令人惊讶的是,即使在使用托管库相当多年之后,还是会有这么多东西回来。

    我需要做的是创建一个servicie,启动它,做一些有用的工作,停止它并删除它。创建、开始、停止和删除都是机械操作,我想把精力集中在活动的“做有用的工作”部分。

    我首先将服务的exe复制到ADMIN$共享,并验证了到该共享的本地路径(与我们的服务器管理员没有任何联系!)为此我打电话给

    ["netapi32.dll"]NetShareGetInfo 
    

    然后我在advapi32.dll中使用了以下命令

    • OpenSCManager
    • 创建服务
    • 启动服务
    • OpenService(当我想停止并删除它时-不要保持句柄打开,因为这可能需要一段时间,所以要保持thngs的自包含性要更干净)
    • 控制服务
    • 查询服务状态
    • 关闭服务句柄

    所有这些都可以通过VPN连接工作。

    我只能猜测,托管api所做的远远超出了我的实际需要——使用托管api和Windows api所花费的时间差别很大,而且不能保证托管api能够通过它,这不是一个合适的前进方向。

        2
  •  0
  •   MPelletier    14 年前

    很明显,MSDN的股票代码并不能说明一切。我得到的结果和你一样。

    看看这个家伙 did .

    编辑:

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