Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   удаленная программная инсталляция (http://forum.oszone.net/showthread.php?t=45210)

Kelasant 10-02-2005 18:52 297133

удаленная программная инсталляция
 
Привет всем!
Хочу программно проинсталлировать какую-то програмульку на другой машине. Тоесть, образно говоря, запускаю свою программу, задаю имя (IP) машины, имя и пароль администратора компьютера, указываю путь к инсталляшке и все. Чтобы инсталляшка по сети была послана на указанную машину, там ее, по всей видимости, подхватила какая-то служба и запустила на выполнение с необходимыми параметрами и с правами админа.

Хочу, но пока не пойму, как это сделать.
Использую Borland C++ Builder 6.0.
Вполне устроит, если это будет работать только с удаленными машинами под Win2K и выше.

Кто-то сможет подсказать, куда направить свой взгляд и на что?

lehha 11-02-2005 08:59 297283

А ты не пробовал это делать через групповые политики в AD??

Kelasant 11-02-2005 19:52 297481

Через групповые политики? Хм.....
Вероятно, для домена это неплохая идея.
Но дело в том, что это ощутимо сужает круг охваченных сетей.
Неплохо бы и для простых рабочих групп такую возможность.

В любом случае - спасибо за инфу, Лехха :)

Kelasant 18-02-2005 21:54 299738

Вдогонку:

В общем, замутил я примерно так: использовал Win API, сделал 4 шага.

1. Конектился к машине с помощью функции:
- WNetAddConnection2

2. Далее копировал необходимую инсталляшку в \ADMIN$
- CopyFile

3. Потом подсоединялся к регистру и писал в "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce"
- RegConnectRegistry
- RegOpenKeyEx
- RegSetValueEx
- RegCloseKey

4. Ну и потом ребутил тачку
- InitiateSystemShutdownEx

После чего сразу после логина запускалась инсталляшка и делала что надо. В общем, как в песне.
Правда, есть пару неудобств.

- Соединяться хочет не всегда - нередко чего-то ей не хватает, капризное подсоединение :(
То ли домен у меня нехорошо настроен, то ли глюки какие-то по сети...

- Выбрал шару ADMIN$ - в Windows должен быть всегда (насколько я понимаю).
А то определяй еще, какие у нее есть шары.

- Не очень мне нравиться использование реестра.
а вдруг какой-нибудь не в меру шустрый локальный админ с целью оптимизации отрубит RemoteRegistry?!
Можно, конечно, развести руками и сказать: "сами виноваты" - но все же?
Может, можно как-то иначе? Может, в таком случае как-то RPC использовать - для подьема службы удаленного подключения реестра
или же для прямого запуска инсталляшки? Аль еще какой вариант?

Будут какие-то мнения, господа?

hasherfrog 19-02-2005 00:01 299764

Kelasant
См. psexec от www.sysinternals.com

Kelasant 19-02-2005 20:55 299982

мда, интересная утилитка - спасибо, hasherfrog.
правда, использовать ее я навряд ли буду, поскольку от меня требуется свой код, и не для себя я ее пишу.

из плюсов: увидел, что я на правильном пути - pcexec конектится к машине аналогично.
осталось только разобраться, как он процессы запускает....

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

а что, WNetAddConnection2 такими мелочами не занимается? или, быть может, я что-то не так понял?

Savant 19-02-2005 21:16 299991

Kelasant
1. Вместо ADMIN$ лучше ADMIN$\Temp
2. А зачем реестр использовать? Есть папка Автозагрузка (Startup)...
3. Вообще все это лучше через WMI прокрутить (Windows Management Instrumentation). Там даже есть специальный метод Win32_Process.Create для удаленного запуска программы. Подробнее в MSDN'e http://msdn.microsoft.com/library/de...l/anch_wmi.asp

Kelasant 20-02-2005 17:40 300207

1. Согласен.
Еще лучше: если нет ADMIN$\Temp (ну мало ли...), то тогда "по старинке" снова в ADMIN$

2. Да, свежее решение :)
Тоже покатит - как вариант, если нет коннекта к реестру.

3. А ту не совсем понятно: с помощью средств WMI Вы предлагаете заменить только этап запуска инсталляшки?
Или же "все это", начиная с подключения к машине?

Спасибо!

Savant 20-02-2005 19:07 300223

Kelasant
Цитата:

Еще лучше: если нет ADMIN$\Temp (ну мало ли...), то тогда "по старинке" снова в ADMIN$
У меня складывается впечатление, что Вы не совсем понимаете, что делаете... ADMIN$ - удаленный %SYSTEMROOT% для активной ОСи. Папка Temp там существует всегда, при её удалении пользователем восстанавливается при перезапуске системы.
Цитата:

А ту не совсем понятно: с помощью средств WMI Вы предлагаете заменить только этап запуска инсталляшки? Или же "все это", начиная с подключения к машине?
Зачем вообще что-то куда-то копировать? Создаете у себя на машине шару Distr и обращаетесь к дистрибутивам как \\computerName\Distr\programName\setupMyProg.exe . Единственная проблема - программирование с помощью WMI (ведь это по сути расширение для VBScript). Чтобы писать программы на С++, придется ознакомится с содержанием этого документа http://msdn.microsoft.com/library/de...pi_for_wmi.asp

Kelasant 20-02-2005 20:14 300238

Цитата:

У меня складывается впечатление, что Вы не совсем понимаете, что делаете...
Ну, с кем порою не бывает?!... ;)

Цитата:

ADMIN$ - удаленный %SYSTEMROOT% для активной ОСи.
Да, это мне известно.

Цитата:

Папка Temp там существует всегда, при её удалении пользователем восстанавливается при перезапуске системы.
Хм, каюсь - не знал, что винда сама восстанавливает папку windows\temp; мне никогда не хотелось ее удалять, да и вообще этой папкой не пользуюсь. Я переменные окружения TMP и TEMP перенаправляю всегда на disk:\Temp - мне так удобнее, не хочу засорять Windows (или даже системный диск) излишне. На машинах некоторых юзеров я порой обнаруживал гигабайты в temp.


Цитата:

Единственная проблема - программирование с помощью WMI (ведь это по сути расширение для VBScript). Чтобы писать программы на С++, придется ознакомится с содержанием этого документа http://msdn.microsoft.com/library/d...api_for_wmi.asp
Извините, если что не так. Но я в некоторых вещах сильно плаваю, поскольку не изучал ранее. К этим вещам относятся COM, WMI...
Постараюсь начать изучать уже...

Спасибо.

lehha 21-02-2005 09:45 300341

Kelasant
Можно еще пользовать стандартный msiexec.exe, тут тогда вообще можно просто обойтись одним батником и не морозиться, единственное, что для него нужны пакеты msi. но существует много прог которые помогут создать пакеты установки..., причем одна из которых идет в стандартной поставке с win2000 server и win2003 server.


Время: 23:41.

Время: 23:41.
© OSzone.net 2001-