Есть приложение WinForm
Пользователь открывает его и вводит логин/пароль для доступа к серверу
В один прекрасный момент приложение получает уведомление, что надо обновиться
и вызывает метод Application.Restart()
Соответственно, открывается новый процесс
Есть возможность передать в него логин/пароль, введенные ранее пользователем?
Файл на диске не рассматривается
Спасибо
Re: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, mDmitriy, Вы писали:
D>Есть возможность передать в него логин/пароль, введенные ранее пользователем? D>Файл на диске не рассматривается
D>Спасибо
Ну, Restart перезапускает с теми же параметрами командной строки, что запускалось изначально.
Можно окно с вводом логина/пароля вынести в отдельное приложение, которое просто будет запускать основное приложение, передавая ему через параметры командной строки логин/пароль.
Re: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, mDmitriy, Вы писали:
D>Есть возможность передать в него логин/пароль, введенные ранее пользователем? D>Файл на диске не рассматривается
То что вы описывает нарушает политику безопасности.
Простой кейс: пользователь пошел покурить пока устанавливается обновление.
Пришел, а кто-то уже поработал)))
Я бы предложил использовать UserDataProtector в сценарии когда пользователь при авторизации устанавливает опцию "сохранить пароль".
Можно еще для большей безопасности аналогичную "входить автоматически".
Чтобы пользователь мог сам отвечать за безопасность АРМ.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, karbofos42, Вы писали:
K>Здравствуйте, mDmitriy, Вы писали:
D>>Есть возможность передать в него логин/пароль, введенные ранее пользователем? D>>Файл на диске не рассматривается
D>>Спасибо
K>Ну, Restart перезапускает с теми же параметрами командной строки, что запускалось изначально. K>Можно окно с вводом логина/пароля вынести в отдельное приложение, которое просто будет запускать основное приложение, передавая ему через параметры командной строки логин/пароль.
Это печально. Параметры процесса спокойно можно посмотреть в ProcessExplorer.
Re[2]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, karbofos42, Вы писали:
K>Здравствуйте, mDmitriy, Вы писали:
D>>Есть возможность передать в него логин/пароль, введенные ранее пользователем? D>>Файл на диске не рассматривается
D>>Спасибо
K>Ну, Restart перезапускает с теми же параметрами командной строки, что запускалось изначально.
Угу... было бы интересно знать где они хранятся, чтобы подменить
K>Можно окно с вводом логина/пароля вынести в отдельное приложение, которое просто будет запускать основное приложение, передавая ему через параметры командной строки логин/пароль.
Слишком муторно
Re[3]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, Danchik, Вы писали:
K>>Можно окно с вводом логина/пароля вынести в отдельное приложение, которое просто будет запускать основное приложение, передавая ему через параметры командной строки логин/пароль.
D>Это печально. Параметры процесса спокойно можно посмотреть в ProcessExplorer.
Зашифровать параметры в строку вообще проблем нет, пусть смотрят...
Re[2]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, varenikAA, Вы писали:
AA>Здравствуйте, mDmitriy, Вы писали:
D>>Есть возможность передать в него логин/пароль, введенные ранее пользователем? D>>Файл на диске не рассматривается
AA>То что вы описывает нарушает политику безопасности.
смотря какую
AA>Простой кейс: пользователь пошел покурить пока устанавливается обновление. AA>Пришел, а кто-то уже поработал)))
от этого защищает время перед отключением дисплея, не надо нагружать этим приложение
AA>Я бы предложил использовать UserDataProtector в сценарии когда пользователь при авторизации устанавливает опцию "сохранить пароль". AA>Можно еще для большей безопасности аналогичную "входить автоматически". AA>Чтобы пользователь мог сам отвечать за безопасность АРМ.
сохранить куда?
Re[2]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>Таких способов более семи штук.
ЭФ>Самое очевидное — remoting + shared memory ЭФ>(ну раз уж там WinForms, то зачем себя сдерживать?)
remoting потребует пароля
shared memory — кто будет управлять?
Re[3]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, mDmitriy, Вы писали:
D>сохранить куда?
UserDataProtector позволяет шифровать данные под текущим пользователем.
Соотвественно сохраняете в профиле пользователя. можно использовать старую добрую Settings scope = user разработанную как раз для винформсов.
Там только нюанс. путь к конфигу генерится в зависимости от пути запуска и св-св сборки. если что-то изменится
конфиг сбросится в ноль.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, mDmitriy, Вы писали:
D>Здравствуйте, karbofos42, Вы писали:
K>>Здравствуйте, mDmitriy, Вы писали:
D>>>Есть возможность передать в него логин/пароль, введенные ранее пользователем? D>>>Файл на диске не рассматривается
D>>>Спасибо
K>>Ну, Restart перезапускает с теми же параметрами командной строки, что запускалось изначально. D>Угу... было бы интересно знать где они хранятся, чтобы подменить
Здравствуйте, varenikAA, Вы писали:
AA>UserDataProtector позволяет шифровать данные под текущим пользователем. AA>Соотвественно сохраняете в профиле пользователя. можно использовать старую добрую Settings scope = user разработанную как раз для винформсов. AA>Там только нюанс. путь к конфигу генерится в зависимости от пути запуска и св-св сборки. если что-то изменится AA>конфиг сбросится в ноль.
тот же файл на диске, но через операционку...
вроде как clickonce перезапускает в каталоге рандомным именем
Re[4]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, varenikAA, Вы писали: D>>от этого защищает время перед отключением дисплея, не надо нагружать этим приложение
AA>Зачем нагружать приложение описанной задачей(перезапуск)? пусть пользователь все сам делает! или еще проще — администратор домена.
администратор домена устанавливает время выключения дисплея
а пользователь выбирает момент, когда ему надо обновить программу
каждый занимается своим делом
Re[5]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, mDmitriy, Вы писали:
D>Здравствуйте, varenikAA, Вы писали: D>>>от этого защищает время перед отключением дисплея, не надо нагружать этим приложение
AA>>Зачем нагружать приложение описанной задачей(перезапуск)? пусть пользователь все сам делает! или еще проще — администратор домена. D>администратор домена устанавливает время выключения дисплея D>а пользователь выбирает момент, когда ему надо обновить программу D>каждый занимается своим делом
Ну, когда я работал админом, то терпеть не мог автообновлялки.
Настраиваешь пользователям нормально права, ограничиваешь по максимуму, чтобы не тащить корявые антивирусы и прочие костыли.
Настраиваешь WSUS, разворачиваешь обновления для всяких архиваторов и прочего, для чего нашёлся msi.
В итоге какая-нибудь дебильная сметная программа хочет обновляться именно сама и именно с правами админа. 1С вообще справочник банков обновляла только под админом (либо админ 1С может повозиться отдельно с обновлением, либо пользователь жмёт кнопку "Обновить" и у него запрашивают админские права на терминальном сервере).
Все эти автообновления в итоге снижают безопасность всей сети, т.к. приходится вносить исключения, давать пользователям лишние права и т.д. и т.п.
По иронии судьбы правда сам уже программистом делал автообновление для нашей программы, потому что так хочет заказчик. Админы меня наверно тоже ненавидят и считают сволочью
Re[6]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, karbofos42, Вы писали:
K>По иронии судьбы правда сам уже программистом делал автообновление для нашей программы, потому что так хочет заказчик. Админы меня наверно тоже ненавидят и считают сволочью
ну надо же как-то обновляться...
в нашем случае админских прав не нужно
программа мониторит сервер и в случае появления новой версии уведомляет пользователя
дальше он уже сам
PS. решил я проблему с передачей контекста
Re[7]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, mDmitriy, Вы писали:
D>Здравствуйте, karbofos42, Вы писали:
K>>По иронии судьбы правда сам уже программистом делал автообновление для нашей программы, потому что так хочет заказчик. Админы меня наверно тоже ненавидят и считают сволочью
D>ну надо же как-то обновляться... D>в нашем случае админских прав не нужно D>программа мониторит сервер и в случае появления новой версии уведомляет пользователя D>дальше он уже сам
со стороны админа:
1) непонятная программа лезет на непонятный сервер и что-то оттуда скачивает на комп
2) непонятные данные, загруженные по сети, являются запускаемым приложением и впоследствии сами себя запускают
Я как админ хотел бы вообще настроить SRP и/или AppLocker, установить что нужно в Program Files и дальнейшие все обновление разворачивать через WSUS (для пользователя это значит обновление через центр обновлений или при входе в комп).
Я как админ предприятия могу быть уверен, что завтра этот чей-то сервер не взломают и не подложат вирус, который программа благополучно скачает и запустит?
Re[5]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, mDmitriy, Вы писали:
D>а пользователь выбирает момент, когда ему надо обновить программу
Разве я не об этом сказал? Пользователь решает сохранить пароль или нет.
Перезагрузка с паролем означает, что вы это решили за пользователя.
Вам решать.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[8]: [WinForm] Application.Restart() - как передать контекст?
Здравствуйте, karbofos42, Вы писали:
K>со стороны админа: K>1) непонятная программа лезет на непонятный сервер и что-то оттуда скачивает на комп K>2) непонятные данные, загруженные по сети, являются запускаемым приложением и впоследствии сами себя запускают
K>Я как админ хотел бы вообще настроить SRP и/или AppLocker, установить что нужно в Program Files и дальнейшие все обновление разворачивать через WSUS (для пользователя это значит обновление через центр обновлений или при входе в комп). K>Я как админ предприятия могу быть уверен, что завтра этот чей-то сервер не взломают и не подложат вирус, который программа благополучно скачает и запустит?
1) у программы есть сертификат, авторизация (WinDirectory) и пр.
2) см. п.1
я понимаю, что админы хотели бы запретить вообще все, но людям ведь еще и работать надо
у нас все происходит в локальной сети
для удаленщиков есть отдельная защита