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 |
|
DLL |
|