Показать полную графическую версию : удаленная программная инсталляция
Kelasant
10-02-2005, 18:52
Привет всем!
Хочу программно проинсталлировать какую-то програмульку на другой машине. Тоесть, образно говоря, запускаю свою программу, задаю имя (IP) машины, имя и пароль администратора компьютера, указываю путь к инсталляшке и все. Чтобы инсталляшка по сети была послана на указанную машину, там ее, по всей видимости, подхватила какая-то служба и запустила на выполнение с необходимыми параметрами и с правами админа.
Хочу, но пока не пойму, как это сделать.
Использую Borland C++ Builder 6.0.
Вполне устроит, если это будет работать только с удаленными машинами под Win2K и выше.
Кто-то сможет подсказать, куда направить свой взгляд и на что?
А ты не пробовал это делать через групповые политики в AD??
Kelasant
11-02-2005, 19:52
Через групповые политики? Хм.....
Вероятно, для домена это неплохая идея.
Но дело в том, что это ощутимо сужает круг охваченных сетей.
Неплохо бы и для простых рабочих групп такую возможность.
В любом случае - спасибо за инфу, Лехха :)
Kelasant
18-02-2005, 21:54
Вдогонку:
В общем, замутил я примерно так: использовал 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
Kelasant
См. psexec от www.sysinternals.com
Kelasant
19-02-2005, 20:55
мда, интересная утилитка - спасибо, hasherfrog.
правда, использовать ее я навряд ли буду, поскольку от меня требуется свой код, и не для себя я ее пишу.
из плюсов: увидел, что я на правильном пути - pcexec конектится к машине аналогично.
осталось только разобраться, как он процессы запускает....
минусы: промелькнули слова о том, что пароль идет по сети в открытом виде! А как же защищенность аутентификации в винде?
я же слышал, что аутентификация в винде идет в три этапа:
- клиент посылает имя юзера
- сервер генерирует некую случайную последовательность байт и отсылает обратно
- клиент отсылает хеш (пароль юзера + последовательность) на сервер, где сервер делает тоже хеш из своего пароля и последовательности. если совпали, то сервер пускает к себе клиент.
а что, WNetAddConnection2 такими мелочами не занимается? или, быть может, я что-то не так понял?
Kelasant
1. Вместо ADMIN$ лучше ADMIN$\Temp
2. А зачем реестр использовать? Есть папка Автозагрузка (Startup)...
3. Вообще все это лучше через WMI прокрутить (Windows Management Instrumentation). Там даже есть специальный метод Win32_Process.Create для удаленного запуска программы. Подробнее в MSDN'e http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_wmi.asp
Kelasant
20-02-2005, 17:40
1. Согласен.
Еще лучше: если нет ADMIN$\Temp (ну мало ли...), то тогда "по старинке" снова в ADMIN$
2. Да, свежее решение :)
Тоже покатит - как вариант, если нет коннекта к реестру.
3. А ту не совсем понятно: с помощью средств WMI Вы предлагаете заменить только этап запуска инсталляшки?
Или же "все это", начиная с подключения к машине?
Спасибо!
KelasantЕще лучше: если нет ADMIN$\Temp (ну мало ли...), то тогда "по старинке" снова в ADMIN$
У меня складывается впечатление, что Вы не совсем понимаете, что делаете... ADMIN$ - удаленный %SYSTEMROOT% для активной ОСи. Папка Temp там существует всегда, при её удалении пользователем восстанавливается при перезапуске системы.
А ту не совсем понятно: с помощью средств WMI Вы предлагаете заменить только этап запуска инсталляшки? Или же "все это", начиная с подключения к машине?
Зачем вообще что-то куда-то копировать? Создаете у себя на машине шару Distr и обращаетесь к дистрибутивам как \\computerName\Distr\programName\setupMyProg.exe . Единственная проблема - программирование с помощью WMI (ведь это по сути расширение для VBScript). Чтобы писать программы на С++, придется ознакомится с содержанием этого документа http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/com_api_for_wmi.asp
Kelasant
20-02-2005, 20:14
У меня складывается впечатление, что Вы не совсем понимаете, что делаете...
Ну, с кем порою не бывает?!... ;)
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...
Постараюсь начать изучать уже...
Спасибо.
Kelasant
Можно еще пользовать стандартный msiexec.exe, тут тогда вообще можно просто обойтись одним батником и не морозиться, единственное, что для него нужны пакеты msi. но существует много прог которые помогут создать пакеты установки..., причем одна из которых идет в стандартной поставке с win2000 server и win2003 server.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.