Win32_Process クラスの Create メソッド
CREATEWMI クラス メソッドは、新しいプロセスを作成します。
このトピックでは、マネージド オブジェクト形式 (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 メソッドを使用して対話型プロセスをリモートで開始することはできません。
Win32_Process.Create メソッドを使用して作成されたプロセスは、CREATE_BREAKAWAY_FROM_JOB フラグが指定されていない限り、ジョブ オブジェクトによって制限されます。 詳細については、「 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] |
|