【问题标题】:Start exe file on remote machine在远程机器上启动 exe 文件
【发布时间】:2014-09-09 12:09:41
【问题描述】:

我有一个进程一个成功停止进程的方法。但是我该如何开始呢?它是一个位于远程计算机硬盘上的 .exe 文件。

var ui = new ImpersonateUser();
var processName = "notepad.exe";
object[] processArgs = { @"C:\\WINDOWS\notepad.exe" };

try
    {
        ui.Impersonate(Domain, _userName, _pass);

        ManagementPath path = new ManagementPath
        {
            Server = "serverName",
            NamespacePath = "\\ROOT\\CIMV2",
            ClassName = "Win32_Process"
        };

        ManagementScope scope = new ManagementScope(path);
        ManagementClass management = new ManagementClass(path);

        var query = new SelectQuery("SELECT * from Win32_process WHERE name = '" + processName + "'");

        using (var searcher = new ManagementObjectSearcher(scope, query))
        {
            foreach (ManagementObject process in searcher.Get())
            {
                process.InvokeMethod("Terminate", null); //This work
                Thread.Sleep(3000);
                management.InvokeMethod("Create", processArgs); //doesnt work. Why ?
            }
        }
    }

关闭后如何让 .exe 启动?

【问题讨论】:

  • 我希望这会给你一个想法。 Creating Process Remotely
  • @Thangadurai 我已经更新了我的答案,但它仍然不起作用
  • 为什么要转义 processArgs 中的第一个反斜杠,而不是第二个?我会朝那个方向看。
  • @NateKerkhofs 不太明白你的意思。尝试了所有不同的路径
  • @krillezzz 你试过@"c:\Windows\notepad.exe"而不是@"c:\\Windows\notepad.exe"吗?您使用的是字符串文字(@),这意味着当您传递该字符串时,该字符串将被完全读取。在这种情况下,您只需要在 c: 和 Windows 之间添加一个反斜杠。如果您使用 2 个退格键,它会尝试转到一个不存在的目录。

标签: c# wmi remote-access


【解决方案1】:

您的程序名称中有错字(D 而不是 T)。它应该是 noTepad.exe 而不是 noDepad.exe 此外,我建议检查 InvokeMethod 返回的结果在您的情况下,它返回 9 意味着 Path Not FoundHere 是完整的代码列表。

更新

如果 InvokeMethod 返回 0,但您在远程计算机上没有看到新的记事本实例,这意味着它是在后台运行的。但是,您应该能够在 Windows 任务管理器中看到这个新实例。

【讨论】:

  • 哦..我换成记事本了,但还是不行。将尝试返回值
猜你喜欢
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 2013-10-23
  • 2020-06-27
  • 2011-04-05
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多