Глядя на это, я подозреваю, что вам придется создавать процесс с использованием WMI через интерфейс COM. В конце концов, это делает этот вариант очень сложным и очень подверженным сбоям по целому ряду причин (WMI отключен или защищен, пользователь не будет полностью доверять и т. Д.) Я подозреваю, что вам будет намного лучше от создания пакета развертывания .msi или чего-то подобного, который мог выйти и загрузить фреймворк, если это необходимо. Доступно множество моделей развертывания, почти все из которых чувствуют себя лучше этой.
Тем не менее, если вы собираетесь сделать это:
Чтобы получить COM-объект, вам нужно использовать AutomationFactory.CreateObject(...)
API. Тим Хойер предоставляет образец здесь.
Чтобы на самом деле выполнять сценарии WMI, вам нужно создать объект WbemScripting.SWbemLocator
в качестве корневого. Оттуда используйте метод ConnectServer
, чтобы получить службу wmi на указанной машине. Затем вы можете запросить модуль Win32_Process
для создания новых процессов.
Редактировать: Я потратил немного времени, работая над этим, и даже на своем локальном компьютере с правами администратора я сталкиваюсь с проблемами безопасности. Правильный код будет выглядеть примерно так:
dynamic locatorService = AutomationFactory.CreateObject("WbemScripting.SWbemLocator");
dynamic wmiService = locatorService.ConnectServer("winmgmts:{impersonationLevel=impersonate,authentationLevel=Pkt}//./root/cimv2");
dynamic process = wmiService.Get("Win32_Process");
dynamic createParameters = process.Methods_["Create"].InParameters.SpawnInstance_;
createParameters.CommandLine = "cmd.exe";
wmiService.ExecMethod("Win32_Process", "Create", createParameters);