Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заставить сетевой комп запустить приложение командой сервера? [D7, Win2k]


Slonco ©   (2004-09-30 08:57:00) 

Вкраце. Есть программа на сервере, которая в определенный момент должна заставить некоторые сетевые компьютеры запустить некое приложение. Как это делается? Какие существуют методики? Помогите кто сталкивался с этой проблемой.
Спасибо.


Slonco   (2004-10-01 11:28:00) [1]

Все это хорошо, но я не знаю VB скриптов и переделка на Дельфи убьет полдня (в лучшем случае). Вот как сие перевести на Дельфи? Я не представляю:

'************************************************************************
'*This script is for executing an application on a remote
'*computer running Win2K or WinNT w/WMI installed.
'*
'*Author: Darron Nesbitt
'*Date: 7/10/2001
'*
'************************************************************************

Dim strComputerName ' The Computer Name to be queried via WMI
Dim strWinMgt' The WMI management String

On Error Resume Next

'get computer's name or ip address
strComputerName = ucase(InputBox("Enter the remote computers name or IP","Computer Name/IP"))
AppPath = ucase(InputBox("Enter path to application:" & VBCRLF & VBCRLF & "Example:C:\WINNT\SYSTEM32\Calc.exe","Application Path"))
WorkingDirectory = ucase(InputBox("Enter path to application directory" & VBCRLF & VBCRLF &  "Example: C:\WINNT\SYSTEM32","Application Working Directory"))
strWinMgt = "winmgmts://" & strComputerName & ""

'
' Get Computer/User Info
'
Set CompSysSet = GetObject(strWinMgt).ExecQuery("select * from Win32_ComputerSystem")
for each CompSys in CompSysSet
        strDescription = CompSys.Description
        strModel       = CompSys.Model
        strName        = CompSys.Name
strManufacturer= CompSys.Manufacturer
strUserName= CompSys.UserName
next

CompInfo = "Computer Information" & VBCrLf & VBCrLf
CompInfo = CompInfo & "Computer Name: " & strName & VBTab & "User: " & strUserName & VBCrLf

'connect to processes
Set Process = GetObject(strWinMgt).Get("Win32_Process")

'start app
RetVal = Process.Create (AppPath,WorkingDirectory,null,PID)

'if 0 not returned error
if RetVal 0 then
MsgBox "Error: " & Err.Description & ":" & Err.Number
else

'build ProcessInfo string
Set Processes = GetObject(strWinMgt).ExecQuery("select * from Win32_Process where ProcessID = " & PID)
for each Process in Processes
RetVal = Process.GetOwner(strUser,strDomain)
ProcessInfo = "Name: " & Process.Caption & VBTAB & "ProcessID: " & PID & VBCRLF
ProcessInfo = ProcessInfo & "Process Owner: " & ucase(strDomain) & "\" & ucase(strUser) & VBCRLF
next

'display info about computer and process
RetVal = MsgBox (CompInfo & VBCRLF & VBCRLF & "Application started." & VBCRLF & VBCRLF & _
 ProcessInfo,VBOKOnly,strComputerName & " - Start Application")
end if

msgbox "Done!!"


Хэльп плиииииз!


BiN   (2004-09-30 16:59:00) [2]

Можно использовать WMI и иже с ним
вот небольшой пример на VB, переделка на Дельфи занимает 3 минуты:

http://www.enterpriseitplanet.com/resources/scripts_win/article.php/3081841


Reindeer Moss Eater   (2004-09-30 14:29:00) [3]

Команда отдается кому-то кто её может принять и понять что она означает.
Это может быть программа.
На том компьютере есть такая программа?


Slonco   (2004-09-30 14:27:00) [4]

Команда от компа на котором стоит Win2003Server сетевому компу. Я имею ввиду команду для командной же строки виндовс.


Reindeer Moss Eater   (2004-09-30 14:17:00) [5]

Есть ли такая команда?

Команда кому?


Slonco   (2004-09-30 14:01:00) [6]

Подробности пришлось искать самому. Нашел я эту at, это команда виндовозовской командной строки:

At
Вывод списка запланированных команд или планирование запуска команд или программ на компьютере в указанное время. Для работы команды at должна быть запущена служба расписаний.

at [\\имя_компьютера] [[код] [/delete] | /delete [/yes]]

at [\\имя_компьютера] время [/interactive] [/every:дата[,...] | /next:дата[,...]] команда

Все гениальное оказалось весьма простым! Однако, можно ли сделать жизнь еще слаще? Можно ли запустить программу СРАЗУ, не устанавливая в командной строке времени и даты запуска, а? Есть ли такая команда? Я что-то не могу найти :(


kaZaNoVa   (2004-09-30 14:00:00) [7]

Slonco   (30.09.04 9:48) [3]

> А, скажем, службы Telnet и RPC можно приспособить для
> этой цели

Telnet запросто, но его сначала нужно запустить ..  (по умолчанию он отключён)+ надо знать пароли локальных пользователей ...

RPC точно не знаю, но если нет патча, то можно юзать его через эксполоит (поищи в нете - он идёт исходником на си)


Slonco   (2004-09-30 10:25:00) [8]

Неа, а что это за команда. Можно поподробнее, плииииииииииз :)


Alex Konshin   (2004-09-30 10:13:00) [9]

Команду "at" не пробовал?


Slonco   (2004-09-30 09:48:00) [10]

А, скажем, службы Telnet и RPC можно приспособить для этой цели? Или они не связаны с поставленным мною вопросом?


Rouse_   (2004-09-30 09:38:00) [11]

На нужных тебе компьютерах запускается написанный тобой сервис, потом связываешся с нужным тебе сервисом и отдаешь ему команду на нужные тебе действия...


Slonco   (2004-09-30 09:01:00) [12]

Сеть LAN если что.


Наверх

Титульная страница Поиск, карта сайта Написать письмо