Criar método da classe Win32_Process

O método de classe CreateWMI cria um novo processo.

Este tópico usa a sintaxe MOF (Managed Object Format). Para obter mais informações sobre como usar esse método, consulte Chamando um método.

Sintaxe

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

Parâmetros

CommandLine [in]

Linha de comando a ser executada. O sistema adiciona um caractere nulo à linha de comando, cortando a cadeia de caracteres, se necessário, para indicar qual arquivo foi realmente usado.

CurrentDirectory [in]

Unidade e diretório atuais para o processo filho. A cadeia de caracteres requer que o diretório atual seja resolvido para um caminho conhecido. Um usuário pode especificar um caminho absoluto ou um caminho relativo ao diretório de trabalho atual. Se esse parâmetro for NULL, o novo processo terá o mesmo caminho que o processo de chamada. Essa opção é fornecida principalmente para shells que devem iniciar um aplicativo e especificar a unidade inicial do aplicativo e o diretório de trabalho.

ProcessStartupInformation [in]

A configuração de inicialização de um processo do Windows. Para obter mais informações, consulte Win32_ProcessStartup.

ProcessId [out]

Identificador de processo global que pode ser usado para identificar um processo. O valor é válido desde o momento em que o processo é criado até o momento em que o processo é encerrado.

Valor retornado

Retorna um valor de 0 (zero) se o processo foi criado com êxito e qualquer outro número para indicar um erro. Para obter códigos de erro adicionais, consulte Constantes de erro WMI ou WbemErrorEnum. Para obter valores gerais de HRESULT , consulte Códigos de erro do sistema.

Conclusão bem-sucedida (0)

Acesso negado (2)

Privilégio insuficiente (3)

Falha desconhecida (8)

Caminho não encontrado (9)

Parâmetro inválido (21)

Outros (22 4294967295)

Comentários

Você pode criar uma instância da classe Win32_ProcessStartup para configurar o processo antes de chamar esse método.

Um caminho totalmente qualificado deve ser especificado nos casos em que o programa a ser iniciado não está no caminho de pesquisa de Winmgmt.exe. Se o processo recém-criado tentar interagir com objetos no sistema de destino sem os privilégios de acesso apropriados, ele será encerrado sem notificação a esse método.

Por motivos de segurança, o método Win32_Process.Create não pode ser usado para iniciar um processo interativo remotamente.

Os processos criados com o método Win32_Process.Create são limitados pelo objeto de trabalho, a menos que o sinalizador CREATE_BREAKAWAY_FROM_JOB seja especificado. Para obter mais informações, consulte Win32_ProcessStartup e __ProviderHostQuotaConfiguration.

Exemplos

O exemplo de VBScript a seguir demonstra como invocar um método CIM como se fosse um método de automação de 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

O exemplo perl a seguir demonstra como invocar um método CIM como se fosse um método de automação de 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";
}

O exemplo de código VBScript a seguir cria um processo de Bloco de Notas no computador local. Win32_ProcessStartup é usado para definir as configurações do processo.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista
Servidor mínimo com suporte
Windows Server 2008
Namespace
Root\CIMV2
MOF
CIMWin32.mof
DLL
CIMWin32.dll

Confira também

Classes do sistema operacional

Win32_Process

Tarefas do WMI: processos