Win32 进程类的 Create 方法 _

Create WMI class方法创建一个新进程。

本主题使用托管对象格式 (MOF) 语法。 有关使用此方法的详细信息,请参阅 调用方法

语法

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

parameters

命令行 [中]

要执行的命令行。 系统将空字符添加到命令行,如有必要,对字符串进行剪裁,以指示实际使用的文件。

CurrentDirectory [中]

子进程的当前驱动器和目录。 字符串要求当前目录解析为已知路径。 用户可以指定绝对路径或相对于当前工作目录的路径。 如果此参数为 NULL,则新进程将与调用进程具有相同的路径。 此选项主要用于必须启动应用程序的 shell,并指定应用程序的初始驱动器和工作目录。

ProcessStartupInformation [中]

Windows 进程的启动配置。 有关详细信息,请参阅 Win32 _ ProcessStartup

ProcessId [弄]

全局进程标识符,可用于标识进程。 值从创建进程到进程终止的时间起有效。

返回值

如果成功创建了进程,则返回值 0 (零) ,并返回任何其他数字来指示错误。 有关其他错误代码,请参阅 WMI 错误常量WbemErrorEnum。 有关常规 HRESULT 值,请参阅 系统错误代码

成功完成 (0)

拒绝访问 (2)

权限不足 (3)

未知故障 (8)

(9) 找不到路径

参数 (21) 无效

其他 (22 4294967295)

备注

可以在调用此方法之前创建 Win32 _ ProcessStartup 类的实例,以配置该进程。

如果要启动的程序不在 Winmgmt.exe 的搜索路径中,则必须指定完全限定的路径。 如果新创建的进程尝试与目标系统上的对象进行交互,但没有适当的访问权限,则该进程将在不通知此方法的情况下终止。

出于安全原因, Win32 _ 进程。 Create 方法不能用于远程启动交互进程。

使用 Win32 进程创建的进程 _ 。 create 方法受作业对象的限制,除非指定 了 _ create BREAKAWAY _ FROM _ job 标志。 有关详细信息,请参阅 Win32 _ ProcessStartup and _ _ 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
命名空间
根 \ CIMV2
MOF
CIMWin32
DLL
CIMWin32.dll

另请参阅

操作系统类

Win32 _ 进程

WMI 任务:进程