Win32_Process 类的 Create 方法
CreateWMI 类方法创建一个新进程。
本主题使用托管对象格式 (MOF) 语法。 有关使用此方法的详细信息,请参阅 调用方法。
语法
uint32 Create(
[in] string CommandLine,
[in] string CurrentDirectory,
[in] Win32_ProcessStartup ProcessStartupInformation,
[out] uint32 ProcessId
);
参数
-
CommandLine [in]
-
要执行的命令行。 系统将向命令行添加一个空字符,并在必要时剪裁字符串,以指示实际使用的文件。
-
CurrentDirectory [in]
-
子进程的当前驱动器和目录。 字符串要求当前目录解析为已知路径。 用户可以指定绝对路径或相对于当前工作目录的路径。 如果此参数为 NULL,则新进程将具有与调用进程相同的路径。 此选项主要用于必须启动应用程序并指定应用程序初始驱动器和工作目录的 shell。
-
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 方法不能用于远程启动交互式进程。
除非指定了 CREATE_BREAKAWAY_FROM_JOB 标志,否则使用 Win32_Process.Create 方法创建的进程受作业对象的限制。 有关详细信息,请参阅 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 |
|
DLL |
|