| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > updater - обновление фалов с сервера |
| Автор: vainaregard 2.8.2010, 08:42 |
| Здравствуйте, необходимо сделать авто обновлялку для файлов с сервера. Какой тут можно посоветовать алгоритм или где подводные камни? Есть сервер (доступ к нему идет по NetBios по адресу вида \\server\folder\ через windows все расшарено, но может потребоваться ввод имени и пароля). Updater должен стучаться по этому адресу и копировать всю папку на локальную машину по адресу c:\program files\folder. Предварительно проверить, если запущен процесс process.exe, тогда замена исполняемого файла не произойдет. В принципе вариант организации ftp-сервера тоже имеет место(ресурзы ОЗУ ограничены), а клиентом будет хитрый скрипт |
| Автор: jonie 2.8.2010, 09:41 |
| никто из присутствующих не против чтобы ты это делал. Делай. |
| Автор: vainaregard 4.8.2010, 06:46 |
| Тогда например столкнулся со следующим: объект типа DirectoryInfo не схватит папку, если она расшарена с паролем. пример \\server\folder доступно Гостю (т.е. заходит без пароля) а \\server\secret_folder запрещен доступ руками из windows Гостю (т.е. надо руками вводить пароль) Вопрос: как мне программно заходить на шары windows, защищенные паролем? Как программно вводить пароль(и подцеплять DirectoryInfo)? |
| Автор: Springtime 11.8.2010, 14:23 |
| Ещё лучше если ты напишешь веб-сервис который будет тебе выдавать файлы по запросу + к нему можно много чего ещё прикрутить да и к тому же Microsoft скорее всего скоро прикроет шары лет так через 5 ))) |
| Автор: mihryak 11.8.2010, 14:27 | ||
чем это поможет, если он будет крутиться не под тем юзером, которому даны права? там тоже придётся делать имперсонализацию забыл ещё третий способ - использовать WinAPI см. WNetAddConnection2, там тоже можно указать юзера с паролем |
| Автор: Springtime 11.8.2010, 14:40 |
Причём тут юзер вообще? Вот у тебя сервак, на нём веб-сервис, который работает так - к нему шлётся запрос от клиента - update() он присылает ответ - типа: граждане! последние файлы расположенные в папочке или в база, версии - 1.7 клиент смотрит - ага у меня эти файлы версии 1.6 (смотрит исходя из версии файлов, или что написано в реестре) посылает серваку очередной запрос - download() сервак отдаёт файлы в виде XML какого ни будь сжатого массива клиент их складывает в какой ни будь промежуточных формат т.к. если запущен process.exe то замены не произойдёт, снова ждём или спрашиваем пользователя если всё оки, то удаляем стырые файлы и переименовываем новые всё делов как яйца почесать! |
| Автор: mihryak 11.8.2010, 14:49 | ||
всё охрененно, казалось бы - сиди и чеши, что чешется, да сигаретки покуривай но! как веб-сервис получит файлы в папке, если шара под паролем? я не говорю, что веб-сервис - плохое решение, но ты совершенно не ответил на посталенный вопрос о доступе к запароленной папке, этот вопрос веб-сервис не решает а так - да, можно и чесать |
| Автор: Springtime 11.8.2010, 14:54 |
Веб сервис у тебя работает от совершенно другой учётной записи, хоть от SYSTEM которая имею доступ в любую дырку |
| Автор: mihryak 11.8.2010, 14:56 | ||
т.е. предлагаешь его для гарантии под домен-админом заупускать? а код без рук чем писать планируешь? администраторы ведь оторвут |
| Автор: Springtime 11.8.2010, 15:07 | ||
Во первых SYSTEM - это ещё не домен админ и даже не админ схемы AD Во вторых для этих нужд выделяется специальная учётка, которая настраивается с соответствующими требованиями В третьих имперсионизация будет работать, но в классе который будет её выполнять следует указать логин и пароль пользователя от которого будет стучаться прога на эту шару. Логин и пароль тебе придётся записывать куда ни будь вручную или хитрожопо вытаскивать его из AD. Что далеко не айс. Класс для имприсиониазции могу подкинуть попозже, т.к. он у меня дома. Я им сам руки повыдёргиваю!!! |
| Автор: mihryak 11.8.2010, 15:55 | ||
это так, да но SYSTEM - это системная учётная запись конкретного компа, на котором будет крутиться сервис, на другом компе у неё прав может и не хватить с новой учёткой вариант хорош, но тогда её придётся прописать во все шары, на которые нужно будет залезать, не уверен, что это будет допустимо, это мало отличается от варианта с прописыванием юзера, под которым сейчас предполагается запускать обновлялку (если бы это было можно сделать, и вопроса бы не возникло) если не пользоваться выделенной учёткой (см. выше), хранить пароли где-нибудь придётся, да, или, как минимум, заставлять вводить при старте, в таком случае, правда автообновлялка уже не будет такой уж авто |
| Автор: Springtime 11.8.2010, 19:22 | ||||
Групповые политики (ГП) тебе в помощь.
Тебе всё равно придётся заморачиваться с имперсионизацией от какой либо одной учётки. Почему у тебя папка от куда будет обновляться программа раскинута по нескольким компьютерам? Чем всё таки плох метод с веб-сервисом? Его также можно настроить чтобы он брал файлы из нескольких мест, зато у тебя точка обновления для программ одна! Автономная, интеллектуальная ))) Или ты просто не знаешь как его делать? Сделать его не так сложно как кажется ))) |
| Автор: mihryak 12.8.2010, 08:52 | ||||||||||
| какой занудный флуд, да простят нас посетители форума уже комментировал
так а я о чём с самого начала говорю? будь это простой ехешник, веб- или вин-сервис, батник или таджик за компом - вопросы имперсонализации всё равно придётся решать, а тот факт, что мы напишем именно веб-серсис, вопроса топик-стартера ну никак не решит
об этом ни слова не сказано, она может быть и на отлючаемом ноуте, да и вообще не факт, что на этом компе можно будет устанавливать какие-либо сервисы см. выше. ничего против не имею, но на вопрос он не отвечает
и ехешника, и вин-сервиса, и батника, и таджика тоже хватит одного наш диалог:
|
| Автор: vainaregard 12.8.2010, 10:40 |
| Всем спасибо, особенно mihryak! Вы все правильно говорите и советуете с имперсонализацией. Но пока отказались вообще от авто-обновлялки, буду "таджиком" Если мутить пользователя специального, там и GP изучать и AD. На коленках мне пока такое не напечатать. Код mihryak точно пригодится. Отдельное спасибо за совет в виде web-servica(WCF если расширенно взглянуть) Думаю, когда руки дойдут, напишу ТЗ со схемами и алгоритмы работы про эту обновлялку. Уже можно и про linux задуматься, как у них там? PS, уж и не надеялся получить такой развернутый ответ, ан нет форум и люди доказали "хорошесь мира" -) может у кого есть образцы внутренних документов (постановки задач, алгоритмы работы ПО) и есть ли стандарты на эту тему? госты про ТЗ не предлагать |
| Автор: Springtime 12.8.2010, 11:24 |
Если тебе это кажется занудным флудом, может ты не совсем тем занимаешься? Уже решил, конкретный алгоритм и конкретное решение под этот алгоритм. В отличии от демонстрации кусков кода и безпочвенной критики. Конкретное решение по имресионизации можно найти как на этом форуме так и на msdn. |
| Автор: mihryak 12.8.2010, 12:00 |
| киса, после коммента jonie был конкретный вопрос про доступ к запароленной шаре, я дал на него три варианта ответа, от тебя же прозвучало, что всё излечит-исцелит добрый доктор веб-сервис. причины, по которым веб-сервис не поможет в конкретном вопросе, ты, я уверен, понял, но упёртость не позволяет в этом признаться, продолжаешь лепить отмазы, в конце сам себя загнал в тупик смотри сам 1. логин-пароль известен (исходя из задачи) 2а. можно добавлять произвольного юзера в шару (по твоим представлениям) - добавляем себя всюду (можно и без всяких групповых политик, руками), всё работает 2б. шара одна и всегда доступна (по твоим представлениям) - запускаем через run as под тем самым, всё работает не приходило в голову, что при таком раскладе и вопроса бы не возникло? и зачем тогда веб-сервис вообще нужен? бизнес-логика будет 1 в 1 (все эти проверялки-обновлялки), только добавится ещё один бессмысленный слой, не приносящий абсолютно никакой пользы. нахрена усложнять? а если же всё сложнее, тогда - да, вариант с веб-сервисом будет хорош, но придётся решать проблемы имперсонализации, о чём я и писал упорно |
| Автор: Springtime 12.8.2010, 12:33 |
| давай мой верный пёс, пиши дальше с помощью run as и WMI решения на WMI жрут очень много процессора между прочим... не забудь ещё про батники и ini файлы, com файлы ))) не забудь ещё порекомендовать установить WINS ))) |
| Автор: mihryak 12.8.2010, 12:42 |
| при чём здесь это? по существу сказать нечего? wmi был предложен лишь как один из трёх вариантов, причём я явно никакому предпочтение не выражал в зависимости от задачи, выбрал бы либо свой ImpersonationScope, либо вин-апишный способ и, опять-таки, веб-сервис-то тут чем поможет? впрочем, утомил, отвечать в этой теме буду только топик-стартеру, если ему понадобится |
| Автор: gambit 15.8.2010, 00:59 |
| Может я бегло прочитал топик, но наездов на Springtime, я не понял. Вопрос, как решить проблему с доступом - ответ веб сервис, который крутиться на сервере, и по запросу отдает файлы. Ему до лампочки, какая учетка на сервере(если она позволяет получить доступ к папке), и какая учетка клиента. Хочется разграничения прав, это тема для отдельного разговора. А в данном моменте этот способ решает поставленную задачу, оставляя огромный потенциал для расширения архитектуры. какие Вы страшные слова в разделе .net говорите. |
| Автор: mihryak 16.8.2010, 14:29 | ||
приветствую, спасибо за интерес к нашей дискуссии!
ну так прочитате небегло, особенно http://forum.vingrad.ru/index.php?showtopic=306772&view=findpost&p=2196472 я не критикую решение, основанное на веб-сервисе, я говорю о том, что, скорее всего, вопросы доступа к папке он не решит, а если исходные условия таковы, что таких проблем не будет, то и сам веб-сервис не слишком нужен. зачем пересылать файлы через веб-сервис, если к ним есть прямой доступ? в чём профит? вы, кстати, эту задачу (пересылку файлов через веб-сервис) решали? а если файлы большие? в конфиге 2гб прописывали, или стриминг прикручивали? гладок ли был путь? а не вопрос ли про доступ к папке , на которую нет прав у текущего пользователя, был задан? а что, http://lmgtfy.com/?q=.net+winapi? я, возможно, открою страшную тайну, но многие дотнетовские вызовы на винде рано или поздно становятся винапишными (кроме, разве что, математики) |
| Автор: gambit 16.8.2010, 18:07 | ||||
вот как раз эту то проблему он и решит так в чем вопрос то тогда? Вопрос вроде в том, что нет прямого доступа.
Да решал, не скажу что гладко, но без ударов головой о стену
нет, тайна не страшная, но зачеи их использовать? .net удобнейшая обертка на winapi, которая позволяет абстрагироваться от них. А при такой логике, зачем вы пишите на шарпе? Пишите на asm, я, возможно, открою страшную тайну, но код рано или поздно становятся asm инструкциями |
| Автор: mihryak 16.8.2010, 18:35 | ||
| отличненьнко как тот факт, что идентичный код окажется в веб-сервисе решит проблемы доступа к шаре? (стоит почитать мои соображения в этом топике про юзера, под которым он крутится, про то, что не факт, что получится поставить сервис на машину с шарой, про то, что придётся, добавлять ещё одну учётку в шару, а раз мы можем это делать, то почему бы не добавить сразу себя и многое другое)
см. выше. веб-сервис сам по себе не даёт доступ к произвольной шаре, а ситуации, когда давал бы именно сам по себе, скорее всего сделают сам веб-сервис бессмысленным к теме не относится, но как именно? классические веб-сервисы или wcf? есть куча ситуаций, когда они нужны, и как раз из "бытового" их использования немалая доля как раз выпадает на сетевые функции, аналогов которых нет во фреймворке если не доводилось ни разу прибегать к ним (не веселья ради, а из необходимости), боюсь, что опыт применения .нет довольно небольшой. в качестве продолжения борьбы с апишными функциями предлагаю: а) написать админам pinvoke, что они нафиг никому не нужны, и пусть закрываются б) попросить ms убрать из .нета неймспейс System.Runtime.InteropServices за той же ненадобностью |