【发布时间】: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