建立Win32_Process類別的方法

CreateWMI 類別方法會建立新的程式。

本主題使用 Managed 物件格式 (MOF) 語法。 如需使用此方法的詳細資訊,請參閱 呼叫 方法

語法

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

參數

CommandLine [in]

要執行的命令列。 系統會視需要將 Null 字元新增至命令列,並修剪字串,以指出實際使用的檔案。

CurrentDirectory [in]

子進程的目前磁片磁碟機和目錄。 字串需要目前的目錄解析為已知的路徑。 使用者可以指定相對於目前工作目錄的絕對路徑或路徑。 如果此參數為 Null,新進程將具有與呼叫進程相同的路徑。 此選項主要是針對必須啟動應用程式的殼層,並指定應用程式的初始磁片磁碟機和工作目錄。

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
CIMWin32.mof
DLL
CIMWin32.dll

另請參閱

作業系統類別

Win32_Process

WMI 工作:進程