![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалённый запуск приложений через WMI [Delphi, Windows]
AbrosimovA © (2006-05-15 12:52:00)Кто-нибудь знает ответ на вопрос: "Почему приложения, которые я запускаю удалённо на другой машине посредством WMI, не отображаются, хотя видны в менеджере задач? Как с этим бороться?"
AbrosimovA (2006-05-22 13:57:00) [1]Спасибо!
umbra (2006-05-22 13:44:00) [2]
> А как же привязать к интерактивной сессии или это невозможно
> в-принципе для удалённого запуска.
невозможно. Вот цитат из МСДН
Создание Процессов на удаленных машинах
Вы можете использовать Win32_Process.Create, чтобы выполнить скрипт или программу на удаленном компьютере. Однако, из соображений безопасности, процесс не может быть интерактивным. Когда Win32_Process.Create вызывается на локальным компьютере, процесс может быть интерактивным.
Удаленный процесс не имеет пользовательского интерфейса, но виден в списке процессов Менеджера Задач.
.....................
Чтобы удаленно создать интерактивный процесс Вы можете использовать
Win32_ScheduledJob.Create. Однако, Win32_ScheduledJob.Create создает процессы от имени учетной записи LocalSystem, что может привести к получению процессом слишком больших прав.
AbrosimovA (2006-05-22 11:20:00) [3]А как же привязать к интерактивной сессии или это невозможно в-принципе для удалённого запуска.
function TMainForm.StartApplication(strServer: string; const Command: string): boolean;
var
ObjWMI: OleVariant;
ObjProcess,ProcessID: OleVariant;
ObjConfig: OleVariant;
Error: OleVariant;
begin
Result:=False;
ObjWMI:=GetObject('Winmgmts:{impersonationLevel=impersonate}!'+strServer+'\root\cimv2');
ObjProcess:= objWMI.Get('Win32_Process');
ObjConfig:=objWMI.Get('Win32_ProcessStartup').SpawnInstance_;
ObjConfig.ShowWindow:=SW_NORMAL;
ObjConfig.WinstationDesktop:= Здесь что указывать;
Error:=ObjProcess.Create(Command,,ObjConfig,ProcessID);
if Error = 0 then
begin
Caption:=IntToStr(ProcessID);
Sleep(300);
Result:=True;
SetForegroundWindow(MainForm.Handle);
end
else
MessageBox(0, PChar('Не удалось запустить приложение.'),
PChar(MainForm.Caption), MB_OK);
end;
umbra (2006-05-22 10:22:00) [4]не видны они, скорее всего, потому, что не привязяны ни к одной интерактивной сессии и поэтому нет рабочего стола, поверх которого они должны отображаться
AbrosimovA (2006-05-22 08:25:00) [5]Поверх рабочего стола.
umbra (2006-05-19 16:29:00) [6]а где они должны отображаться?