Как создать процесс на новом рабочем столе с помощью WMI?
Я пытаюсь создать процесс на новом рабочем столе, используя приведенный ниже код, но бывает, что процесс выполняется на рабочем столе по умолчанию. Как решить?
uses
ComObj;
procedure ExecuteInNewDesktop;
const
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObject : OLEVariant;
objProcess : OLEVariant;
objConfig : OLEVariant;
ProcessID : Integer;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
FWbemObject := FWMIService.Get('Win32_ProcessStartup');
objConfig := FWbemObject.SpawnInstance_;
objConfig.CreateFlags := CREATE_NEW_CONSOLE;
objConfig.WinstationDesktop := 'WinSta0\LLTTestDesktop1'; // 'LLTTestDesktop1' is my new desktop
objConfig.ShowWindow := SW_NORMAL;
objProcess := FWMIService.Get('Win32_Process');
objProcess.Create('C:\Windows\System32\calc.exe', NULL, objConfig, ProcessID);
ShowMessage(IntToStr(ProcessID));
end;
ИЗДАНИЕ:
Вероятно, эта проблема может быть связана с изоляцией служб, уже этот процесс выполняется службой (WmiPrvSE.exe), см. Ниже (проверено на Win 7 x64):
Если это так, то большая ошибка в документации MSDN гласит, что опция WinstationDesktop может запускать программу на новом рабочем столе.