Создание метода класса Win32_Process

Метод класса CreateWMI создает новый процесс.

В этом разделе используется синтаксис MOF. Дополнительные сведения об использовании этого метода см. в разделе Вызов метода .

Синтаксис

uint32 Create(
  [in]  string               CommandLine,
  [in]  string               CurrentDirectory,
  [in]  Win32_ProcessStartup ProcessStartupInformation,
  [out] uint32               ProcessId
);

Параметры

CommandLine [in]

Командная строка для выполнения. Система добавляет в командную строку символ NULL, при необходимости обрезая строку, чтобы указать, какой файл фактически использовался.

CurrentDirectory [in]

Текущий диск и каталог для дочернего процесса. Для строки требуется, чтобы текущий каталог разрешал в известный путь. Пользователь может указать абсолютный путь или путь относительно текущего рабочего каталога. Если этот параметр имеет значение NULL, новый процесс будет иметь тот же путь, что и вызывающий процесс. Этот параметр предоставляется в основном для оболочек, которые должны запускать приложение и указывать начальный диск и рабочий каталог приложения.

ProcessStartupInformation [in]

Конфигурация запуска процесса Windows. Дополнительные сведения см. в разделе Win32_ProcessStartup.

ProcessId [out]

Глобальный идентификатор процесса, который можно использовать для идентификации процесса. Значение является допустимым с момента создания процесса до момента его завершения.

Возвращаемое значение

Возвращает значение 0 (ноль), если процесс был успешно создан, и любое другое число, указывающее на ошибку. Дополнительные коды ошибок см. в разделе Константы ошибок WMI или WbemErrorEnum. Общие значения HRESULT см. в разделе Системные коды ошибок.

Успешное завершение (0)

Доступ запрещен (2)

Недостаточно привилегий (3)

Неизвестный сбой (8)

Путь не найден (9)

Недопустимый параметр (21)

Другое (22 4294967295)

Комментарии

Вы можете создать экземпляр класса Win32_ProcessStartup , чтобы настроить процесс перед вызовом этого метода.

Полный путь должен быть указан в случаях, когда программа, запускаемая, не находится в пути поиска Winmgmt.exe. Если созданный процесс пытается взаимодействовать с объектами в целевой системе без соответствующих прав доступа, он завершается без уведомления этого метода.

По соображениям безопасности метод Win32_Process.Create нельзя использовать для удаленного запуска интерактивного процесса.

Процессы, созданные с помощью метода Win32_Process.Create , ограничены объектом задания, если не указан флаг CREATE_BREAKAWAY_FROM_JOB . Дополнительные сведения см. в разделе Win32_ProcessStartup и __ProviderHostQuotaConfiguration.

Примеры

В следующем примере VBScript показано, как вызвать метод CIM, как если бы он был методом автоматизации SWbemObject.

on error resume next

set process = GetObject("winmgmts:Win32_Process")

result = process.Create ("notepad.exe",null,null,processid)

WScript.Echo "Method returned result = " & result
WScript.Echo "Id of new process is " & processid

if err <>0 then
 WScript.Echo Err.Description, "0x" & Hex(Err.Number)
end if

В следующем примере Perl показано, как вызвать метод CIM, как если бы он был методом автоматизации SWbemObject.

use strict;
use Win32::OLE;

my ($process, $outParam, $processid, $inParam, $objMethod);

eval { $process = 
 Win32::OLE->GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2:Win32_Process"); };

if (!$@ && defined $process)
{
 $objMethod = $process->Methods_("Create");

 #Spawn an instance of inParameters and assign the values.
 $inParam = $objMethod->inParameters->SpawnInstance_ if (defined $objMethod);
 $inParam->{CommandLine} = "notepad.exe";
 $inParam->{CurrentDirectory} = undef;
 $inParam->{ProcessStartupInformation} = undef;

 $outParam = $process->ExecMethod_("Create", $inParam) if (defined $inParam);
 if ($outParam->{ReturnValue})
 {
  print STDERR Win32::OLE->LastError, "\n";
 }
 else
 {
  print "Method returned result = $outParam->{ReturnValue}\n";
  print "Id of new process is $outParam->{ProcessId}\n"
 }
}
else
{
 print STDERR Win32::OLE->LastError, "\n";
}

В следующем примере кода VBScript создается процесс Блокнота на локальном компьютере. Win32_ProcessStartup используется для настройки параметров процесса.

Const SW_NORMAL = 1
strComputer = "."
strCommand = "Notepad.exe" 
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")

' Configure the Notepad process to show a window
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = SW_NORMAL

' Create Notepad process
Set objProcess = objWMIService.Get("Win32_Process")
intReturn = objProcess.Create _
    (strCommand, Null, objConfig, intProcessID)
If intReturn <> 0 Then
    Wscript.Echo "Process could not be created." & _
        vbNewLine & "Command line: " & strCommand & _
        vbNewLine & "Return value: " & intReturn
Else
    Wscript.Echo "Process created." & _
        vbNewLine & "Command line: " & strCommand & _
        vbNewLine & "Process ID: " & intProcessID
End If

Требования

Требование Значение
Минимальная версия клиента
Windows Vista
Минимальная версия сервера
Windows Server 2008
Пространство имен
Root\CIMV2
MOF
CIMWin32.mof
DLL
CIMWin32.dll

См. также раздел

Классы операционной системы

Win32_Process

Задачи WMI: процессы