Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> updater - обновление фалов с сервера, программа обновлялка клиентов с сервера 
V
    Опции темы
vainaregard
  Дата 2.8.2010, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.2.2010
Где: Россия

Репутация: нет
Всего: нет



Здравствуйте, необходимо сделать авто обновлялку для файлов с сервера. 
Какой тут можно посоветовать алгоритм или где подводные камни?
Есть сервер (доступ к нему идет по NetBios по адресу вида \\server\folder\ через windows все расшарено, но может потребоваться ввод имени и пароля). Updater должен стучаться по этому адресу и копировать всю папку на локальную машину по адресу c:\program files\folder. 
Предварительно проверить, если запущен процесс process.exe, тогда замена исполняемого файла не произойдет.

В принципе вариант организации ftp-сервера тоже имеет место(ресурзы ОЗУ ограничены), а клиентом будет хитрый скрипт
PM MAIL ICQ   Вверх
jonie
Дата 2.8.2010, 09:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



никто из присутствующих не против чтобы ты это делал. Делай.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
vainaregard
Дата 4.8.2010, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.2.2010
Где: Россия

Репутация: нет
Всего: нет



Тогда например столкнулся со следующим: 
объект типа DirectoryInfo не схватит папку, если она расшарена с паролем.
пример \\server\folder доступно Гостю (т.е. заходит без пароля)
а \\server\secret_folder запрещен доступ руками из windows  Гостю (т.е. надо руками вводить пароль)
Вопрос: как мне программно заходить на шары windows, защищенные паролем? Как программно вводить пароль(и подцеплять DirectoryInfo)?
PM MAIL ICQ   Вверх
mihryak
Дата 11.8.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(vainaregard @  4.8.2010,  07:46 Найти цитируемый пост)
Вопрос: как мне программно заходить на шары windows, защищенные паролем? Как программно вводить пароль(и подцеплять DirectoryInfo)? 

1. использовать WMI, в конструкторе можно указать имя пользователя и пароль. инетерсовать должен класс Win32_LogicalDisk (точнее не скажу, никогда не общался с файлами через wmi, но это точно возможно)
2. использовать явную имперсонализацию, т.е. на время доступа к запароленной папке "стать" тем самым юзером
вот такой класс написал для удобства:
Код

    public class ImpersonationScope : IDisposable
    {
        private IntPtr _userToken;
        private IntPtr _duplicateUserToken;
        private readonly WindowsIdentity _identity;
        private readonly WindowsImpersonationContext _impersonationContext;

        private bool _disposed;

        public ImpersonationScope(string user, string domain, string password)
        {
            if (!LogonUser(user, domain, password, LogonType.Interactive, LogonProvider.Default, out _userToken) ||
                !DuplicateToken(_userToken, SecurityImpersonationLevel.Impersonation, ref _duplicateUserToken))
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }
            _identity = new WindowsIdentity(_duplicateUserToken);
            _impersonationContext = _identity.Impersonate();
        }

        #region IDisposable Members

        ~ImpersonationScope()
        {
            Dispose(false);
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        private void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (disposing)
                {
                    _impersonationContext.Dispose();
                    // NOTE: Workaround. Don't dispose identity here
                    // http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=324865
                    //_identity.Dispose();
                }
                SafeCloseHandle(ref _duplicateUserToken);
                SafeCloseHandle(ref _userToken);
                _disposed = true;
            }
        }

        private static void SafeCloseHandle(ref IntPtr handle)
        {
            if (handle != IntPtr.Zero)
            {
                CloseHandle(handle);
                handle = IntPtr.Zero;
            }
        }

        #endregion

        #region Interop

        private enum LogonType
        {
            Interactive = 2,
        }

        private enum LogonProvider
        {
            Default = 0,
        }

        public enum SecurityImpersonationLevel
        {
            Impersonation = 2
        }

        [DllImport("advapi32.dll", SetLastError = true)]
        private static extern bool LogonUser(
            string lpszUsername,
            string lpszDomain,
            string lpszPassword,
            LogonType dwLogonType,
            LogonProvider dwLogonProvider,
            out IntPtr phToken
            );

        [DllImport("advapi32.dll", SetLastError = true)]
        public extern static bool DuplicateToken(
            IntPtr ExistingTokenHandle,
            SecurityImpersonationLevel impersonationLevel,
            ref IntPtr DuplicateTokenHandle);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        private extern static bool CloseHandle(IntPtr handle);

        #endregion
    }

используется так:
Код

using (new ImpersonationScope("user", "domain", "password"))
{
    // do something user-specific here
}


Это сообщение отредактировал(а) mihryak - 11.8.2010, 14:12
PM MAIL ICQ   Вверх
Springtime
Дата 11.8.2010, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Ещё лучше если ты напишешь веб-сервис который будет тебе выдавать файлы по запросу
+ к нему можно много чего ещё прикрутить
да и к тому же Microsoft скорее всего скоро прикроет шары лет так через 5 )))
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
mihryak
Дата 11.8.2010, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(Springtime @  11.8.2010,  15:23 Найти цитируемый пост)
лучше если ты напишешь веб-сервис который будет тебе выдавать файлы по запросу

чем это поможет, если он будет крутиться не под тем юзером, которому даны права? там тоже придётся делать имперсонализацию

забыл ещё третий способ - использовать WinAPI
см. WNetAddConnection2, там тоже можно указать юзера с паролем
PM MAIL ICQ   Вверх
Springtime
Дата 11.8.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Цитата(mihryak @  11.8.2010,  14:27 Найти цитируемый пост)
если он будет крутиться не под тем юзером, которому даны права

Причём тут юзер вообще?

Вот у тебя сервак, на нём веб-сервис, который работает так -
к нему шлётся запрос от клиента - update()
он присылает ответ - типа: граждане! последние файлы расположенные в папочке или в база, версии - 1.7
клиент смотрит - ага у меня эти файлы версии 1.6 (смотрит исходя из версии файлов, или что написано в реестре)
посылает серваку очередной запрос - download()
сервак отдаёт файлы в виде XML какого ни будь сжатого массива
клиент их складывает в какой ни будь промежуточных формат
т.к. если запущен process.exe то замены не произойдёт, снова ждём или спрашиваем пользователя
если всё оки, то удаляем стырые файлы и переименовываем новые

всё делов как яйца почесать!
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
mihryak
Дата 11.8.2010, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(Springtime @  11.8.2010,  15:40 Найти цитируемый пост)
он присылает ответ - типа: граждане! последние файлы расположенные в папочке

всё охрененно, казалось бы - сиди и чеши, что чешется, да сигаретки покуривай
но! как веб-сервис получит файлы в папке, если шара под паролем?
я не говорю, что веб-сервис - плохое решение, но ты совершенно не ответил на посталенный вопрос о доступе к запароленной папке, этот вопрос веб-сервис не решает
а так - да, можно и чесать
PM MAIL ICQ   Вверх
Springtime
Дата 11.8.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Цитата(mihryak @  11.8.2010,  14:49 Найти цитируемый пост)
но! как веб-сервис получит файлы в папке, если шара под паролем?

Веб сервис у тебя работает от совершенно другой учётной записи, хоть от SYSTEM которая имею доступ в любую дырку
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
mihryak
Дата 11.8.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(Springtime @  11.8.2010,  15:54 Найти цитируемый пост)
Веб сервис у тебя работает от совершенно другой учётной записи, хоть от SYSTEM которая имею доступ в любую дырку 

т.е. предлагаешь его для гарантии под домен-админом заупускать? а код без рук чем писать планируешь? администраторы ведь оторвут
PM MAIL ICQ   Вверх
Springtime
Дата 11.8.2010, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Цитата(mihryak @  11.8.2010,  14:56 Найти цитируемый пост)
т.е. предлагаешь его для гарантии под домен-админом заупускать? а код без рук чем писать планируешь? администраторы ведь оторвут 


Во первых SYSTEM - это ещё не домен админ и даже не админ схемы AD
Во вторых для этих нужд выделяется специальная учётка, которая настраивается с соответствующими требованиями

В третьих имперсионизация будет работать, но в классе который будет её выполнять следует указать логин и пароль пользователя от которого будет стучаться прога на эту шару. Логин и пароль тебе придётся записывать куда ни будь вручную или хитрожопо вытаскивать его из AD. Что далеко не айс.

Класс для имприсиониазции могу подкинуть попозже, т.к. он у меня дома.

Я им сам руки повыдёргиваю!!!

Это сообщение отредактировал(а) Springtime - 11.8.2010, 15:08
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
mihryak
Дата 11.8.2010, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(Springtime @  11.8.2010,  16:07 Найти цитируемый пост)
Во первых SYSTEM - это ещё не домен админ и даже не админ схемы AD

это так, да
но SYSTEM - это системная учётная запись конкретного компа, на котором будет крутиться сервис, на другом компе у неё прав может и не хватить
с новой учёткой вариант хорош, но тогда её придётся прописать во все шары, на которые нужно будет залезать, не уверен, что это будет допустимо, это мало отличается от варианта с прописыванием юзера, под которым сейчас предполагается запускать обновлялку (если бы это было можно сделать, и вопроса бы не возникло)
если не пользоваться выделенной учёткой (см. выше), хранить пароли где-нибудь придётся, да, или, как минимум, заставлять вводить при старте, в таком случае, правда автообновлялка уже не будет такой уж авто
PM MAIL ICQ   Вверх
Springtime
Дата 11.8.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Цитата(mihryak @  11.8.2010,  15:55 Найти цитируемый пост)
но тогда её придётся прописать во все шары, на которые нужно будет залезать, не уверен, что это будет допустимо

Групповые политики (ГП) тебе в помощь.

Цитата(mihryak @  11.8.2010,  15:55 Найти цитируемый пост)
но SYSTEM - это системная учётная запись конкретного компа, на котором будет крутиться сервис, на другом компе у неё прав может и не хватить

Тебе всё равно придётся заморачиваться с имперсионизацией от какой либо одной учётки.

Цитата(mihryak @  11.8.2010,  15:55 Найти цитируемый пост)
на другом компе у неё прав может и не хватить

Почему у тебя папка от куда будет обновляться программа раскинута по нескольким компьютерам?

Чем всё таки плох метод с веб-сервисом? Его также можно настроить чтобы он брал файлы из нескольких мест, зато у тебя точка обновления для программ одна! Автономная, интеллектуальная ))) 
Или ты просто не знаешь как его делать? Сделать его не так сложно как кажется )))
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
mihryak
Дата 12.8.2010, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



какой занудный флуд, да простят нас посетители форума smile

Цитата(Springtime @  11.8.2010,  20:22 Найти цитируемый пост)
Групповые политики (ГП) тебе в помощь.

уже комментировал
Цитата(mihryak @  11.8.2010,  16:55 Найти цитируемый пост)
мало отличается от варианта с прописыванием юзера, под которым сейчас предполагается запускать обновлялку (если бы это было можно сделать, и вопроса бы не возникло)


Цитата(Springtime @  11.8.2010,  20:22 Найти цитируемый пост)
Тебе всё равно придётся заморачиваться с имперсионизацией от какой либо одной учётки.

так а я о чём с самого начала говорю? будь это простой ехешник, веб- или вин-сервис, батник или таджик за компом - вопросы имперсонализации всё равно придётся решать, а тот факт, что мы напишем именно веб-серсис, вопроса топик-стартера ну никак не решит

Цитата(Springtime @  11.8.2010,  20:22 Найти цитируемый пост)
Почему у тебя папка от куда будет обновляться программа раскинута по нескольким компьютерам?

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


Цитата(Springtime @  11.8.2010,  20:22 Найти цитируемый пост)
Чем всё таки плох метод с веб-сервисом?

см. выше. ничего против не имею, но на вопрос он не отвечает
Цитата(Springtime @  11.8.2010,  20:22 Найти цитируемый пост)
точка обновления для программ одна! Автономная, интеллектуальная

и ехешника, и вин-сервиса, и батника, и таджика тоже хватит одного

наш диалог:
Код

топик-стартер: как купить продуктов?
я: тебе понадобятся деньги
ты: надень клёвую кепочку!
я: кепка - это круто, но деньги всё равно нужны
ты: чем тебе так не нравится кепочка?
... далее ещё несколько таких же кругов



Это сообщение отредактировал(а) mihryak - 12.8.2010, 08:54
PM MAIL ICQ   Вверх
vainaregard
Дата 12.8.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.2.2010
Где: Россия

Репутация: нет
Всего: нет



Всем спасибо, особенно mihryak! Вы все правильно говорите и советуете с имперсонализацией.
Но пока отказались вообще от авто-обновлялки, буду "таджиком"
Если мутить пользователя специального, там и GP изучать и AD. На коленках мне пока такое не напечатать.
Код mihryak точно пригодится.
Отдельное спасибо за совет в виде web-servica(WCF если расширенно взглянуть)
Думаю, когда руки дойдут, напишу ТЗ со схемами и алгоритмы работы про эту обновлялку.
Уже можно и про linux задуматься, как у них там?
PS, уж и не надеялся получить такой развернутый ответ, ан нет форум и люди доказали "хорошесь мира" -)
может у кого есть образцы внутренних документов (постановки задач, алгоритмы работы ПО) и есть ли стандарты на эту тему?
госты про ТЗ не предлагать
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.