Win32 進程類別的 Create 方法 _

建立 WMI 類別方法會建立新的進程。

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

語法

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

參數

命令列 [在]

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

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 _ BREAKAWAY _ FROM _ job 旗標,否則 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
命名空間
根 \ CIMV2
MOF
CIMWin32 mof
DLL
CIMWin32.dll

另請參閱

作業系統類別

Win32 _ 進程

WMI 工作:進程