|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Порассуждать хочу. Есть задача прикрутить email->2->fax к Fax and Scan/служба факсов. Задача в принципе не новая, мной давно решенная, но как бы не вполне идеально. Т.е. по уму это должна быть "служба" (NT Service), чтоб беспроблемно работало до "входа пользователя в систему" (типично напр. на Win серверах). Службы - как правило выполняются а) SYSTEM (Локальная система) б) Network Service (Сетевая служба) И несмотря на то что сам Fax Service - это Network Service (исключение - старый XP, где SYSTEM), с точки зрения указанной задачи есть проблемы 1) Любые Fax Service API, генерирующие задание факса, подразумевают печать документа на принтер "Fax". При этом де-факто используется printto. И если на XP с этим проблем в целом не было, то печать из-под System/Network Service на Win10 какого-нибудь .txt или .jpg - это нормально нерешаемая задача, потому что file ext. для этих аккаунтов по дефолту не зарегистрированы, и "полечить" можно разве ручками через всякие Sysinternals, да и то далеко не всегда (на 8.1 еще был способ подрихтовать реестр для "System", оч. хитрый, но это программировалось). 2) Самое паршивое еще то, что автоматически сгенерированные из под System аккаунта задания факса потом не видятся в Outbox/Sent в Fax and Scan, и назначение всяческих прав на просмотр/удаление/управление не сильно помогает. ну и т.д. Выходом на мой взгляд является запуск сервиса от имени какого-либо реального пользователя Вход в систему -> С учетной записью (назначаем пользователя, вводим пароль). Т.е служба работает от имени "смертного пользователя, м.б. администратора" , я сделал кое-какие тесты, вроде идея должна работать. Но вот насколько это хорошо? Служба от имени пользователя, а не системы? Я таких "штатных" служб на компе не вижу. Есть еще видимо вариант запускать под той же "System", а отдельную операцию (FaxSendDocument==Printto) делать "От имени". Еще как бы несколько смущает, что подобные конструкции требуют независимого ввода пароля пользователя, "клонировать" автоматом текущего (настраивающего прогу, от которого потом будет стартовать сервис) так понимаю нельзя? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 05:52 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77 Но вот насколько это хорошо? Служба от имени пользователя, а не системы? Я таких "штатных" служб на компе не вижу. У нас полно таких сервисов. Работают без проблем уже не первый год. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 06:03 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, А пароль юзера ручками всегда вводите при "вводе в эксплуатацию"? Или можно как-то "склонировать" текущего? Просто если нельзя, то придется как минимум делать морду "Ввод пароля" типа как в Tweak UI (Автовход в систему) было. Прога просит у юзера (текущего) пароль к его аккаунту. Как то некрасиво и подозрительно что ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 06:16 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77Сон Веры Павловны, А пароль юзера ручками всегда вводите при "вводе в эксплуатацию"? Это же одноразовая операция при инсталляции сервиса. Сервис, кстати, тоже не святым духом ставится, а руками из командной строки с помощью installutil - вот она в процессе установки и запрашивает логин/пароль. Для обновления исполняемых файлов достаточно остановить сервис, заменить файлы, и снова запустить сервис - при этом никаких логинов/паролей вводить не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 07:56 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77Прога просит у юзера (текущего) пароль к его аккаунту. Как то некрасиво и подозрительно что ли. А, так нужно, чтобы у каждого пользователя сервис работал под его личной учеткой? Нет, такое не практикуется - у нас вышеупомянутые сервисы работают со специально созданной под сервис учеткой на отдельном хосте, и сервис всегда работает только под этой учеткой. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 07:57 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77 Но вот насколько это хорошо? Служба от имени пользователя, а не системы? Плохо. Учётка пользователя на то и учётка пользователя, что под ней работает сам пользователь. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 09:49 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77Выходом на мой взгляд являетс Купить библиотеку, в которой все эти проблемы решены, если не получается решить их самостоятельно, и приходится задумываться о таких жестоких костылях, как запуск сервиса под учёткой пользователя ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 09:56 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныА, так нужно, чтобы у каждого пользователя сервис работал под его личной учеткой? Нет, такое не практикуется - у нас вышеупомянутые сервисы работают со специально созданной под сервис учеткой на отдельном хосте, и сервис всегда работает только под этой учеткой. Нет, "специально созданная под сервис учетка" - так не пойдет. Должен быть назначен один, конкретный, но реальный юзер. Потому что, 2) Самое паршивое еще то, что автоматически сгенерированные из под System аккаунта задания факса потом не видятся в Outbox/Sent в Fax and Scan, и назначение всяческих прав на просмотр/удаление/управление не сильно помогает. ну и т.д. Ну, грубо говоря, этот юзер должен уметь запустить "Fax and Scan" и видеть что там происходит, отправленные/исходящие факсы, уметь их просматривать удалять. "назначение всяческих прав на просмотр/удаление/управление не сильно помогает" означает, что даже если дать юзеру эти права, то обновлять таблицы можно только вручную, сам факс программа не видит и т.д., т.е. "Fax and Scan" даже после "танцев с бубнами" практически не работает с "чужими" заданиями. Сон Веры ПавловныСервис, кстати, тоже не святым духом ставится, а руками из командной строки с помощью installutil - вот она в процессе установки и запрашивает логин/пароль.. Программно установить сервис не проблема, хотя "под юзера" не пробовал, но думаю делается. Только пароль таки придется думаю запрашивать. Хотя я бы честно предпочел автоустановку с автовводом "того кто устанавливает". (вот неужели нельзя свой пароль подставить - того кто в тек. момент залогинен). hVostt Купить библиотеку, в которой все эти проблемы решены, Так уж "все эти" (см. первый пост, 2 там перечислены)? Кто ж такими волшебными торгует? Просто понимаешь, "mail2fax" -задача по всей логике "сервисная", а "MS fax API" - ориентированы на "Client Fax Application" - Client читай User. hVosttДмитрий77 Но вот насколько это хорошо? Служба от имени пользователя, а не системы? Плохо. Учётка пользователя на то и учётка пользователя, что под ней работает сам пользователь. Ну, внешне как то тоже думаю плохо. Ну вариантов других чтоб безглючно/беспроблемно работало боюсь нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 11:37 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77(вот неужели нельзя свой пароль подставить - того кто в тек. момент залогинен). Нельзя. Никоим образом нельзя узнать пароль пользователя. Если он, конечно, не хранит его в файлике ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 15:39 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
А если так - Logon as a user without a password ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 16:05 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
buserА если так - Logon as a user without a password Чет мутно там все. Ничего не понял. Короче напишу exe-шник, а потом уж (параллельно?) буду думать под каким соусом/аккаунтом его эксплуатировать. Собственно, давно уже написано, но есть над чем поработать (тек. версия работает на выбор либо как App под User, либо как System as Service, причем последнее не без озвученных накладок, но с новым приложением App не прокатит ну вообще никак). Хотя да, если "ввод пароля", то точно не в конфиге проги его хранить. Пароль этот - он сильно "компрометирует", вызывает вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 17:30 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77Чет мутно там все. Ничего не понял. Я тоже ничего не понял. buser , поясните пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 21:39 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Cat2, ок... похоже я, как обычно, не понял задачу... более подробно Protocol Transition with Constrained Delegation Technical Supplement P.S.: идея при установке создать пользователя дать ему нужные гранты и запустить под ним сервис не так уж и плоха... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 22:33 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
buserP.S.: идея при установке создать пользователя дать ему нужные гранты и запустить под ним сервис не так уж и плоха... В моем случае идея плоха. Оптимально - это создать сервис под текущим пользователем. Почему: потому что именно текущий сможет просматривать/управлять автосгенерированными факсами в Fax & Scan ("чужими" нормально не сможет). Именно текущий сможет подкорректировать дефолтное приложение для file ext. чтоб работало printto (ручками или м.б. программно). Поэтому давайте сформулируем задачу: надо программно установить (или наверно настроить - поменять пользователя ) сервис с заданным именем, чтоб он работал под Current User (тот кот. в данный момент сидит за компом, под ним этот сервис и будет в дальнейшем работать). Пусть ему придется вводить пароль, но чтоб это было красиво. Крайне желательно чтоб не надо было свое имя (с именами доменов, слешами, точками и т.п.) "рисовать" (надо гарантированно вычислить чтоб съелось). Еще желательно, чтоб окно ввода пароля было таки какое-либо системное. Давайте на всяк. случай уточним. Я исторически не использую .Net сервисы, а предпочитаю писать (ну да, .Net) Exe-шник, а потом делать его сервисом через NSSM - the Non-Sucking Service Manager , поэтому installutil.exe похоже ни к месту. NSSM кажется умеет ставить только как SYSTEM. Но поменять то "ручками" можно. А как программно? P.S. В принципе я могу подумать на тему ".Net-сервиса", приложение таки планируется новое (хотя и клон уже имеющегося). Но хотелось бы сосредоточиться на задаче смены юзера для уже установленного сервиса с заданным именем. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 23:15 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Ну вот так вроде Код: vbnet 1.
(ну и наверняка через SC-API то же самое) , но блин 1) Computer\username@hotmail.com ну или Computer\username еще "вычислить" надо 2) для MyPassword - самописное окошко ввода надо Некрасиво. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2017, 23:34 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
buserCat2, ок... похоже я, как обычно, не понял задачу... более подробно Protocol Transition with Constrained Delegation Technical Supplement P.S.: идея при установке создать пользователя дать ему нужные гранты и запустить под ним сервис не так уж и плоха... Это нормальная идея. Я не понял как залогинится под юзером без пароля. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 00:06 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Cat2buserCat2, ок... похоже я, как обычно, не понял задачу... более подробно Protocol Transition with Constrained Delegation Technical Supplement P.S.: идея при установке создать пользователя дать ему нужные гранты и запустить под ним сервис не так уж и плоха... Это нормальная идея. Я не понял как залогинится под юзером без пароля. Если P.S. относится к ссылке, то как раз все понятно. Прога может создать юзера с паролем, но пароль то она знает, поэтому тот же sc шито-крыто его и введет. Где-то я такой фокус видел, не помню в связи с чем. Но к сожалению не мой вариант, юзер должен быть реальный, он же "администратор факсов" (с т.зр. проги). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 00:30 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77 Давайте на всяк. случай уточним. Я исторически не использую .Net сервисы, Так, гипотетически. А если .Net сервисы решали бы твои проблемы, начал бы исопльзовать? Или это глубоко религиозное? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 01:22 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77, Не понимаю, если ты хочешь рабочее приложение под текущим юзером, зачем делать вообще сервис? Придумать себе проблему и героически мудохаться с ней? Запусти нормально приложение, спрячь в трей или вообще скрой, засунь в автозапуск. Проблема решена, ни один юзер не пострадал. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 01:25 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
hVostt, а как оно принципиально решит описанную задачу? Мне удобно тестировать как простой exe а потом бухать в "сервис". Так привык. Чтоб посмотреть, что делается под System/Network Service есть русинович. И ничего хорошего там скажу я не делается. Мне здесь нужно нечто, что будет делать Fax Job именно из-под юзера. И еще скорее всего тогда события факс-сервера надо из-под юзера отслеживать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 01:32 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
>Не понимаю, если ты хочешь рабочее приложение под текущим юзером, зачем делать вообще сервис? А до входа в систему, на серверах оно как работать будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 01:33 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77а как оно принципиально решит описанную задачу? Включаем банальную логику: 1. Если приложение должно работать у пользователя, пароля которого мы не знаем и знать права не имеем, то делаем приложение. Приложение инсталлится в автозапуск и работает не хуже сервиса, прячется если надо и всё такое. 2. Если приложение должно работать на сервере (и прям обязательно в виде сервиса), значит мы можем завести специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения, тогда нет никакой проблемы проинсталлить сервис, который будет работать под учёткой пользователя. Классический сервис под .NET запилить может даже обезьяна. Зачем искать какие-то полумеры? Раз уж выбрал .NET, юзай его возможности, если хочеш русиновича, гоу на плюсы ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 02:03 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Сон Веры Павловны а руками из командной строки с помощью installutil - вот она в процессе установки и запрашивает логин/пароль. Сон Веры ПавловныКлассический сервис под .NET запилить может даже обезьяна. .NET, юзай его возможности Это ж какая обезьяна это окошко рисовала? вводить туда кстати надо ровно то что вводится в строку Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 17:07 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
hVostt, А проект .Net "Windows Service" хотя бы умееет запускаться как просто exe? Если не умеет, то это как минимум гимор при тестировании. Честно, не вижу смысла этой кухни. За ради в журнал Windows через EventLog мусорить? (пару фраз что сервис запустился/остановился и NSSM в журнал пишет, а чего приложение делает удобней писать в его лог, кот. в папке log программы) hVosttВключаем банальную логику: 1. Если приложение должно работать у пользователя, пароля которого мы не знаем и знать права не имеем, то делаем приложение. Приложение инсталлится в автозапуск и работает не хуже сервиса, прячется если надо и всё такое. 2. Если приложение должно работать на сервере (и прям обязательно в виде сервиса), значит мы можем завести специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения, тогда нет никакой проблемы проинсталлить сервис, который будет работать под учёткой пользователя. Ну, самый разумный в моем случае вариант. 1) При инсталляции ставить модуль как "приложение" (чтоб некрасиво не было из-за "окон ввода пароля") под текущего пользователя. Под "всех пользователей" нельзя, на multi-user системе (сервере) будет бардак. 2) В настройках иметь опцию "запускать как сервис", где предлагать ввод пользователя/пароля с подстановкой текущего пользователя (предполанается вызов "As Admin") с объяснением почему именно пользователя в диалоге ввода пароля (кратко) и хэлпе (поподробней). Диалог свой естественно, без вариантов. Использовать API, а не sc - иначе хрен отследишь что процедура установки прошла корректно. >специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения В моем случае нужен реальный пользователь, почему 10 раз объяснил выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 17:33 |
|
Запуск службы "с учетной записью пользователя".
|
|||
---|---|---|---|
#18+
Дмитрий77>специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения В моем случае нужен реальный пользователь, почему 10 раз объяснил выше. пока залогоненый пользователь не запустил приложение - работает сервис от имени метафизического или иного пользователя, заданного при установке. при запуске приложения - сервис встаёт на паузу, при завершении - возобновляет работу ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2017, 17:56 |
|
|
start [/forum/topic.php?fid=20&fpage=39&tid=1399719]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 319ms |
total: | 460ms |
0 / 0 |