建立Win32_Process類別的方法
建立WMI 類別方法會建立新的程式。
本主題使用 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 |
|
DLL |
|