Глядя на это, я подозреваю, что вам придется создавать процесс с использованием 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);
person
Ben Von Handorf
schedule
21.03.2010