Как создать процесс на новом рабочем столе с помощью 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 может запускать программу на новом рабочем столе.

0 ответов

Другие вопросы по тегам