Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

Удаленная установка стевеого приложения.   Найти похожие ветки 

 
Makhanev A.S.   (2003-12-12 20:58) [0]

Как в больших компаниях устанавливают сетевые приложения, которые надо ставить на каждого клиента?

Средствами RAdmin"а, каждый раз лазить на клиента...?
Или просить всех сотрудников самим взять файл с расшаренного ресурса и установить?
Или через ActiveDirectory опять же с сервера лезть к каждому клиенту?

В сетевом приложении хочется обеспечить простую установку на каждого клиента с сервера (поставить на сотню клиентов приложение "всего за 1 клик").

Пробуем WMI, но пугает пара вещей:

- нет оконного интерфейса, точнее он блокируется у запускаемых процессов в целях безопасности;
- не можем удалённо запустить с клиента файл, находящийся вне клиента... То есть файлы, физически находящиеся на клиенте, запускаются; а файлы с удаленных (относительно клиента) машин - нет. А очень нужно запустить файл именно с нашего же "сервера".

Может не стоит так заморачиваться с удаленной установкой?

Сейчас смотрим еще в сторону WindowsInstaller...пока ничего не ясно.


 
panov   (2003-12-12 21:23) [1]

1. Назначить пользователям Logon-скрипты.
2. Воспользоваться WSH или написать свою программку для обработки заданий на установку и обновление.

Если нужно, могу привести пример программы, которую писал под себя...


 
Makhanev A.S.   (2003-12-13 00:31) [2]


> panov © (12.12.03 21:23) [1]

Буду очень благодарен.
Пример приму на istok@bel.ru

Еще раз спасибо!


 
panov   (2003-12-13 01:12) [3]

>Makhanev A.S. © (13.12.03 00:31) [2]
Только в понедельник, когда появлюсь а работе.


 
Makhanev A.S.   (2003-12-13 01:25) [4]


> panov © (13.12.03 01:12) [3]

без проблем.

Спасибо!


 
panov   (2003-12-13 17:24) [5]

Может мы о разных вещах говорим?
У меня сделана программа для обновления и установки любых программ, не требующих участия пользователя.


 
Makhanev A.S.   (2003-12-13 18:08) [6]


> panov © (13.12.03 17:24) [5]


Ваша программа может сама закачать дистрибутив "извне" на клиента и запустить на выполнение?

То есть:
я - сижу под админом.
на клиенте ничего нет.
кликаю пару кнопок - и с моего жесткого диска дистрибутив посылается клиенту и ставится на нём же.
Мне только что сообщили, что это уже вполне реально через скрипты... проблема как раз в их привязке к Delphi, т.к. VB не юзаем.
Сейчас этим занимается мой коллега, и если Вы пришлете рабочий пример - я думаю, это очень ускорит процесс поиска решения.


 
Polevi   (2003-12-13 18:40) [7]

у нас файл-сервер новел-нетварь - каждому юзеру или группе можно назначить скрипт, который отработает при логоне - со всеми вытекающими


 
Rouse_   (2003-12-13 18:46) [8]

> и с моего жесткого диска дистрибутив посылается клиенту
До соединения клиента с сервером ничего не может посылаться... поэтому клик на нескольких кнопках не поможет... я так думаю, что необходимо чтоб сам клиент запрашивал требуемые ему данные...


 
panov   (2003-12-14 21:58) [9]

Установка проводится в момент подключения клиента к домену(Microsoft server/NetWare Server).
Именно в этот момент работает скрипт и в нем можно все выполнить.


 
panov   (2003-12-15 12:18) [10]

Исходный текст программы:

program jobs;

{$APPTYPE CONSOLE}

uses
windows,
SysUtils;

function WinToDos(const aSrc: String): String;
begin
Result := aSrc;
CharToOem(PChar(aSrc),Pchar(Result));
end;

procedure ExecCmd(const aCommand: String;const aShow, aWaitExit: Boolean);
var
pi:PROCESS_INFORMATION;
si:STARTUPINFO;
cmdLine,Path: String;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.dwFlags := STARTF_FORCEONFEEDBACK+STARTF_USESHOWWINDOW;
if aShow then si.wShowWindow := SW_SHOWNORMAL else si.wShowWindow := SW_HIDE;
Path := ExtractFilePath(aCommand);
cmdLine := aCommand;

if CreateProcess( nil, // No module name (use command line).
PChar(cmdLine), // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent"s environment block.
PChar(Path), // Use parent"s starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then
begin
if aWaitExit then WaitForSingleObject( pi.hProcess, infinite );
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
end;
end;

function GetCurrDir: String;
var
LenBuf: Integer;
begin
LenBuf := 4096;
SetLength(Result,4096);
LenBuf := GetCurrentDirectory(LenBuf,@Result[1]);
SetLength(Result,LenBuf);
end;

function GetParmEnv(const aParm: String): String;
var
LenBuf: Integer;
begin
LenBuf := 4096;
SetLength(Result,4096);
LenBuf := GetEnvironmentVariable(PChar(aParm),@Result[1],LenBuf);
SetLength(Result,LenBuf);
end;

function GetParmStr(const ininame,aSec,aParm:String): String;
var
LenBuf: Integer;
begin
LenBuf := 4096;
SetLength(Result,4096);
LenBuf := GetPrivateProfileString(PChar(aSec),PChar(aParm),"",@Result[1],LenBuf,PChar(IniName));
SetLength(Result,LenBuf);
end;

function WriteParmStr(const ininame,aSec,aParm,aValue:String):Boolean;
begin
Result := Boolean(WritePrivateProfileString(PChar(aSec),PChar(aParm),PChar(aValue),PChar(IniName)));
end;

function Getjob(const Parm: String): String;
var
n: Integer;
begin
Result := Parm;
n := Pos("/",Parm);
if n>0 then Result := Trim(Copy(Parm,1,n-1));
end;

function GetParm(const Parm: String): String;
var
n: Integer;
begin
Result := Parm;
n := Pos("/",Parm);
if n>0 then Result := Trim(Copy(Parm,n,255));
end;

var
SrcPath,
LOGONSERVER: String;
UserName: String;
i: Integer;
nPos: Integer;
Job: String;
MyIni: String;
Parm: String;
Command: String;
isUser: Boolean=False;
begin
LOGONSERVER := UpperCase(GetParmEnv("LOGONSERVER"));
UserName := UpperCase(GetParmEnv("USERNAME"));
SrcPath := LOGONSERVER+"\Distr\Updates\";
Job := "";
parm := UpperCase(GetParmStr(SrcPath+"exe\updates.ini","jobs","job"+IntToStr(1)));
Job := GetJob(parm);
MyIni := GetParmEnv("SystemRoot")+"\Jobs.ini";

i := 1;
while Job<>"" do
begin
if GetParmStr(MyIni,"jobs","job"+IntToStr(i))<>"Updated" then
begin
nPos := Pos("/",Parm);
Command := "";
if nPos>0 then
begin
Command := Copy(Parm,nPos,2);
if Pos(UserName,GetParm(Parm))>0 then isUser := True else IsUser := False;
end;
if Command<>"" then
begin
case Command[2] of
"Y":
if isUser then
begin
ExecCmd("x:\updates\exe\"+Job,True,True);
WriteParmStr(MyIni,"jobs","job"+IntToStr(i),"Updated");
end;
"N":
if not isUser then
begin
ExecCmd("x:\updates\exe\"+Job,True,True);
WriteParmStr(MyIni,"jobs","job"+IntToStr(i),"Updated");
end;
end;
end;
end;

Inc(i);
Job := GetJob(GetParmStr(SrcPath+"exe\updates.ini","jobs","job"+IntToStr(i)));
end;
end.


 
panov   (2003-12-15 12:26) [11]

Содержимое файла updates.ini (Находится в доступном для всех каталоге на сервере.

[main]
[jobs]
job1=job1.cmd /N:rav,sjv
job2=job2.cmd /N:rav,sjv
job3=job3.cmd /N:rav,sjv
job4=job4.cmd /N:rav,sjv
job5=job5.cmd
job6=job6.cmd
job7=job7.cmd
job8=job8.cmd
job9=job9.cmd
job10=job10.cmd
job11=job11.cmd
job12=job12.cmd


Парамтр /N:<Login Name,...,...> указывает, что этому пользователю /пользователям не надо устанавливать/обновлять программу.
Парамтр /Y:<Login Name,...,...> указывает, что только этому пользователю/пользователям не надо устанавливать/обновлять программу.

После обновления программы в системном каталоге появляется файл Jobs.ini, содержащий признак обновления:
[jobs]
job1=Updated
job2=Updated
job3=Updated
job4=Updated
job5=Updated
job6=Updated
job7=Updated
job8=Updated
job9=Updated
job10=Updated
job11=Updated
job12=Updated



job1.cmd
...
jobN.cmd - обычные пакетеые файлы, которые будут выполнены.

Пример:

if NOT EXIST c:\veda\cons\base.cfg Exit
del c:\veda\cons\rezerv\*.* /q
copy "x:\consultant\пополнения\save\030919\*.*" c:\veda\argus\in\
c:
cd \veda\cons\popol
call popol.bat


Простейший скрипт, в котором будут вызываться обновления при подключении пользователя к домену:

: Подключение дисков
net use x: /DELETE /YES
net use y: /DELETE /YES
net use i: /DELETE /YES
net use o: /DELETE /YES
net use p: /DELETE /YES
net use r: /DELETE /YES

net use x: %LOGONSERVER%\Distr
net use y: %LOGONSERVER%\Common
net use i: "%LOGONSERVER%\Инструктивные материалы"
net use p: %LOGONSERVER%\Apps

: Обработка для различных пользователей

if /I %USERNAME%==panov call panov.cmd

...

goto c1

:c1
:@del c:\temp\*.* /f /s /q >nul
RD /S /Q c:\temp
MD c:\Temp
COPY %LOGONSERVER%\Distr\Updates\exe\jobs.exe %SystemRoot%\
%SystemRoot%\jobs.exe


 
Makhanev A.S.   (2003-12-15 13:20) [12]


> panov © (15.12.03 12:18) [10]

огромное спасибо.
не знаю, как благодарить.

Сейчас будем с всё это разбирать/изучать...

Спасибо!


 
kosha80   (2003-12-16 07:32) [13]

Посмотри в командной строке справку по команде AT (WinXP, Win2k)


 
GH@ST   (2003-12-16 09:07) [14]

Если по принципу РАдмина..то он устанавливается сервисом..сервис можно устанавливать на копьютер удаленно так же можно удаленно делать настройки реестра под этот сервис...именно так делает корпоративный нортон антивирус..запускаешь сервер..выбираешь компьютеры на которые нужно поставить и вперед..хоть на все сразу..



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.042 c
4-80376
Mohamed
2003-12-15 20:09
2004.02.25
Pomogite c Button1Click:SetTimer


14-80177
syte_ser78
2004-02-05 15:03
2004.02.25
SaveHTMLSourceToFile


7-80321
KommandorDi
2003-12-03 18:06
2004.02.25
Ошибка при автозагрузке вместе с Windows


6-80051
mafia
2003-12-17 14:09
2004.02.25
TWebBrowser


6-80058
Bless
2003-12-18 17:30
2004.02.25
Ассинхронные прием/передача данных в консольном приложении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский