1

我需要远程创建一个服务,并且不希望使用命令并运行“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?)

谢谢

4

2 回答 2

2

在考虑了一会儿之后,看到分配给此任务的时间被侵蚀掉了,我拿出了旧的 WIN32 api 文档,并 [DllImport] 调用了我需要以“老式方式”执行此操作的调用。作为一个老 C 狗,我曾经知道如何处理这些调用,令人惊讶的是,即使在使用托管库好几年之后,还能有多少回报。

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

我首先将服务的 exe 复制到 ADMIN$ 共享并验证了到该共享的本地路径(我们的服务器管理员不知道!)。为此,我打电话

["netapi32.dll"]NetShareGetInfo 

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

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

这一切甚至可以通过 VPN 连接进行。

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

于 2010-11-23T10:00:13.140 回答
0

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

看看这家伙了什么。

编辑:

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

于 2010-11-22T05:16:43.243 回答