Crear método de la clase Win32_Process

El método declase CreateWMI crea un nuevo proceso.

En este tema se usa la sintaxis de Managed Object Format (MOF). Para obtener más información sobre el uso de este método, vea Llamar a un método.

Sintaxis

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

Parámetros

CommandLine [in]

Línea de comandos que se va a ejecutar. El sistema agrega un carácter NULL a la línea de comandos, recortando la cadena si es necesario, para indicar qué archivo se usó realmente.

CurrentDirectory [in]

Unidad actual y directorio para el proceso secundario. La cadena requiere que el directorio actual se resuelva en una ruta de acceso conocida. Un usuario puede especificar una ruta de acceso absoluta o una ruta de acceso relativa al directorio de trabajo actual. Si este parámetro es NULL, el nuevo proceso tendrá la misma ruta de acceso que el proceso de llamada. Esta opción se proporciona principalmente para los shells que deben iniciar una aplicación y especificar la unidad inicial y el directorio de trabajo de la aplicación.

ProcessStartupInformation [in]

Configuración de inicio de un proceso de Windows. Para obtener más información, consulte Win32_ProcessStartup.

ProcessId [out]

Identificador de proceso global que se puede usar para identificar un proceso. El valor es válido desde el momento en que se crea el proceso hasta que finaliza el proceso.

Valor devuelto

Devuelve un valor de 0 (cero) si el proceso se creó correctamente y cualquier otro número para indicar un error. Para obtener códigos de error adicionales, consulte Constantes de error de WMI o WbemErrorEnum. Para obtener valores HRESULT generales, consulte Códigos de error del sistema.

Finalización correcta (0)

Acceso denegado (2)

Privilegio insuficiente (3)

Error desconocido (8)

Ruta de acceso no encontrada (9)

Parámetro no válido (21)

Otros (22 4294967295)

Observaciones

Puede crear una instancia de la clase Win32_ProcessStartup para configurar el proceso antes de llamar a este método.

Se debe especificar una ruta de acceso completa en los casos en los que el programa que se va a iniciar no esté en la ruta de acceso de búsqueda de Winmgmt.exe. Si el proceso recién creado intenta interactuar con objetos en el sistema de destino sin los privilegios de acceso adecuados, finaliza sin notificación a este método.

Por motivos de seguridad, el método Win32_Process.Create no se puede usar para iniciar un proceso interactivo de forma remota.

Los procesos creados con el método Win32_Process.Create están limitados por el objeto de trabajo a menos que se especifique la marca CREATE_BREAKAWAY_FROM_JOB . Para obtener más información, consulte Win32_ProcessStartup y __ProviderHostQuotaConfiguration.

Ejemplos

En el siguiente ejemplo de VBScript se muestra cómo invocar un método CIM como si fuera un método de automatización 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

En el siguiente ejemplo de Perl se muestra cómo invocar un método CIM como si fuera un método de automatización 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";
}

En el ejemplo de código de VBScript siguiente se crea un proceso de Bloc de notas en el equipo local. Win32_ProcessStartup se usa para configurar los valores del proceso.

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 Value
Cliente mínimo compatible
Windows Vista
Servidor mínimo compatible
Windows Server 2008
Espacio de nombres
Root\CIMV2
MOF
CIMWin32.mof
Archivo DLL
CIMWin32.dll

Consulte también

Clases de sistema operativo

Win32_Process

Tareas de WMI: procesos