powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск службы "с учетной записью пользователя".
31 сообщений из 31, показаны все 2 страниц
Запуск службы "с учетной записью пользователя".
    #39517890
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Порассуждать хочу.

Есть задача прикрутить 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) делать "От имени".

Еще как бы несколько смущает, что подобные конструкции требуют независимого ввода пароля пользователя, "клонировать" автоматом текущего (настраивающего прогу, от которого потом будет стартовать сервис) так понимаю нельзя?
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39517892
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Но вот насколько это хорошо? Служба от имени пользователя, а не системы?
Я таких "штатных" служб на компе не вижу.
У нас полно таких сервисов. Работают без проблем уже не первый год.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39517893
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

А пароль юзера ручками всегда вводите при "вводе в эксплуатацию"?
Или можно как-то "склонировать" текущего?
Просто если нельзя, то придется как минимум делать морду "Ввод пароля" типа как в Tweak UI (Автовход в систему) было.
Прога просит у юзера (текущего) пароль к его аккаунту. Как то некрасиво и подозрительно что ли.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39517923
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Сон Веры Павловны,

А пароль юзера ручками всегда вводите при "вводе в эксплуатацию"?
Это же одноразовая операция при инсталляции сервиса. Сервис, кстати, тоже не святым духом ставится, а руками из командной строки с помощью installutil - вот она в процессе установки и запрашивает логин/пароль. Для обновления исполняемых файлов достаточно остановить сервис, заменить файлы, и снова запустить сервис - при этом никаких логинов/паролей вводить не нужно.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39517924
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Прога просит у юзера (текущего) пароль к его аккаунту. Как то некрасиво и подозрительно что ли.
А, так нужно, чтобы у каждого пользователя сервис работал под его личной учеткой? Нет, такое не практикуется - у нас вышеупомянутые сервисы работают со специально созданной под сервис учеткой на отдельном хосте, и сервис всегда работает только под этой учеткой.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39517992
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Но вот насколько это хорошо? Служба от имени пользователя, а не системы?

Плохо. Учётка пользователя на то и учётка пользователя, что под ней работает сам пользователь.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39517995
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Выходом на мой взгляд являетс

Купить библиотеку, в которой все эти проблемы решены, если не получается решить их самостоятельно, и приходится задумываться о таких жестоких костылях, как запуск сервиса под учёткой пользователя
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518045
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныА, так нужно, чтобы у каждого пользователя сервис работал под его личной учеткой? Нет, такое не практикуется - у нас вышеупомянутые сервисы работают со специально созданной под сервис учеткой на отдельном хосте, и сервис всегда работает только под этой учеткой.
Нет, "специально созданная под сервис учетка" - так не пойдет.
Должен быть назначен один, конкретный, но реальный юзер.
Потому что,
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 Но вот насколько это хорошо? Служба от имени пользователя, а не системы?
Плохо. Учётка пользователя на то и учётка пользователя, что под ней работает сам пользователь.
Ну, внешне как то тоже думаю плохо. Ну вариантов других чтоб безглючно/беспроблемно работало боюсь нет.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518293
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дмитрий77(вот неужели нельзя свой пароль подставить - того кто в тек. момент залогинен).
Нельзя. Никоим образом нельзя узнать пароль пользователя. Если он, конечно, не хранит его в файлике
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518311
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518364
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserА если так - Logon as a user without a password
Чет мутно там все. Ничего не понял.

Короче напишу exe-шник, а потом уж (параллельно?) буду думать под каким соусом/аккаунтом его эксплуатировать. Собственно, давно уже написано, но есть над чем поработать (тек. версия работает на выбор либо как App под User, либо как System as Service, причем последнее не без озвученных накладок, но с новым приложением App не прокатит ну вообще никак).

Хотя да, если "ввод пароля", то точно не в конфиге проги его хранить. Пароль этот - он сильно "компрометирует", вызывает вопросы.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518437
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дмитрий77Чет мутно там все. Ничего не понял.
Я тоже ничего не понял.
buser , поясните пожалуйста
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518460
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2, ок... похоже я, как обычно, не понял задачу... более подробно Protocol Transition with Constrained Delegation Technical Supplement
P.S.: идея при установке создать пользователя дать ему нужные гранты и запустить под ним сервис не так уж и плоха...
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518469
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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-сервиса", приложение таки планируется новое (хотя и клон уже имеющегося).
Но хотелось бы сосредоточиться на задаче смены юзера для уже установленного сервиса с заданным именем.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518474
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот так вроде
Код: vbnet
1.
C:\WINDOWS\system32>sc config MyServiceName obj= "Computer\username@hotmail.com" password="MyPassword"


(ну и наверняка через SC-API то же самое)
, но блин
1) Computer\username@hotmail.com ну или Computer\username еще "вычислить" надо
2) для MyPassword - самописное окошко ввода надо

Некрасиво.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518476
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
buserCat2, ок... похоже я, как обычно, не понял задачу... более подробно Protocol Transition with Constrained Delegation Technical Supplement
P.S.: идея при установке создать пользователя дать ему нужные гранты и запустить под ним сервис не так уж и плоха...
Это нормальная идея.

Я не понял как залогинится под юзером без пароля.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518481
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2buserCat2, ок... похоже я, как обычно, не понял задачу... более подробно Protocol Transition with Constrained Delegation Technical Supplement
P.S.: идея при установке создать пользователя дать ему нужные гранты и запустить под ним сервис не так уж и плоха...
Это нормальная идея.

Я не понял как залогинится под юзером без пароля.
Если P.S. относится к ссылке, то как раз все понятно. Прога может создать юзера с паролем,
но пароль то она знает, поэтому тот же sc шито-крыто его и введет.
Где-то я такой фокус видел, не помню в связи с чем.
Но к сожалению не мой вариант, юзер должен быть реальный, он же "администратор факсов" (с т.зр. проги).
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518497
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Давайте на всяк. случай уточним. Я исторически не использую .Net сервисы,


Так, гипотетически. А если .Net сервисы решали бы твои проблемы, начал бы исопльзовать? Или это глубоко религиозное? :)
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518499
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Не понимаю, если ты хочешь рабочее приложение под текущим юзером, зачем делать вообще сервис? Придумать себе проблему и героически мудохаться с ней?

Запусти нормально приложение, спрячь в трей или вообще скрой, засунь в автозапуск.

Проблема решена, ни один юзер не пострадал.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518501
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

а как оно принципиально решит описанную задачу?

Мне удобно тестировать как простой exe а потом бухать в "сервис". Так привык.
Чтоб посмотреть, что делается под System/Network Service есть русинович.
И ничего хорошего там скажу я не делается.

Мне здесь нужно нечто, что будет делать Fax Job именно из-под юзера.
И еще скорее всего тогда события факс-сервера надо из-под юзера отслеживать.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518503
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Не понимаю, если ты хочешь рабочее приложение под текущим юзером, зачем делать вообще сервис?
А до входа в систему, на серверах оно как работать будет?
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518510
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77а как оно принципиально решит описанную задачу?

Включаем банальную логику:

1. Если приложение должно работать у пользователя, пароля которого мы не знаем и знать права не имеем, то делаем приложение. Приложение инсталлится в автозапуск и работает не хуже сервиса, прячется если надо и всё такое.

2. Если приложение должно работать на сервере (и прям обязательно в виде сервиса), значит мы можем завести специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения, тогда нет никакой проблемы проинсталлить сервис, который будет работать под учёткой пользователя.

Классический сервис под .NET запилить может даже обезьяна.

Зачем искать какие-то полумеры?

Раз уж выбрал .NET, юзай его возможности, если хочеш русиновича, гоу на плюсы
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518640
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны а руками из командной строки с помощью installutil - вот она в процессе установки и запрашивает логин/пароль.
Сон Веры ПавловныКлассический сервис под .NET запилить может даже обезьяна.
.NET, юзай его возможности
Это ж какая обезьяна это окошко рисовала?
вводить туда кстати надо ровно то что вводится в строку
Код: vbnet
1.
C:\WINDOWS\system32>sc config MyServiceName obj= "Computer\username@hotmail.com" password="MyPassword"
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518645
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

А проект .Net "Windows Service" хотя бы умееет запускаться как просто exe?
Если не умеет, то это как минимум гимор при тестировании.

Честно, не вижу смысла этой кухни. За ради в журнал Windows через EventLog мусорить?
(пару фраз что сервис запустился/остановился и NSSM в журнал пишет, а чего приложение делает удобней писать в его лог, кот. в папке log программы)

hVosttВключаем банальную логику:

1. Если приложение должно работать у пользователя, пароля которого мы не знаем и знать права не имеем, то делаем приложение. Приложение инсталлится в автозапуск и работает не хуже сервиса, прячется если надо и всё такое.

2. Если приложение должно работать на сервере (и прям обязательно в виде сервиса), значит мы можем завести специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения, тогда нет никакой проблемы проинсталлить сервис, который будет работать под учёткой пользователя.

Ну, самый разумный в моем случае вариант.
1) При инсталляции ставить модуль как "приложение" (чтоб некрасиво не было из-за "окон ввода пароля") под текущего пользователя.
Под "всех пользователей" нельзя, на multi-user системе (сервере) будет бардак.
2) В настройках иметь опцию "запускать как сервис", где предлагать ввод пользователя/пароля с подстановкой текущего пользователя (предполанается вызов "As Admin") с объяснением почему именно пользователя в диалоге ввода пароля (кратко) и хэлпе (поподробней). Диалог свой естественно, без вариантов. Использовать API, а не sc - иначе хрен отследишь что процедура установки прошла корректно.

>специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения
В моем случае нужен реальный пользователь, почему 10 раз объяснил выше.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518650
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77>специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения
В моем случае нужен реальный пользователь, почему 10 раз объяснил выше.
пока залогоненый пользователь не запустил приложение - работает сервис от имени метафизического или иного пользователя, заданного при установке.
при запуске приложения - сервис встаёт на паузу, при завершении - возобновляет работу
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518656
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77А проект .Net "Windows Service" хотя бы умееет запускаться как просто exe?
Если не умеет, то это как минимум гимор при тестировании.
Обычно всю сервисную логику выносят в отдельную сборку. И в солюшене, таким образом, 3 проекта: class library со всей логикой, консольное приложение для тестирования, и собственно приложение-сервис, в котором есть только сервис-инсталлер и запускалка сервиса. И никаких проблем с тестированием.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518657
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилДмитрий77>специальную учётку пользователя, пароль который мы знаем, так как «пользователь» метафизический, чисто для работы приложения
В моем случае нужен реальный пользователь, почему 10 раз объяснил выше.
пока залогоненый пользователь не запустил приложение - работает сервис от имени метафизического или иного пользователя, заданного при установке.
при запуске приложения - сервис встаёт на паузу, при завершении - возобновляет работу
Объясни что хотел сказать?

Смотри,
если сервис запущен от имени D\Метафизический пользователь,
то факс создается также от имени D\Метафизический пользователь
Когда реальный пользователь D\Dmitry, который имеет право хотеть посмотреть что там насоздавалось и напосылалось, как вообще дела идут, он запустит программу "Факсы и сканирование Windows".
Факсов, посланных от имени D\Метафизический пользователь (равно как и от имени SYSTEM),
он там не увидит.
Если даже дать пользователю D\Dmitry все возможные права на все факсы (Сервис -> Параметры факса -> Безопасность), он чего-то увидит, но как он это увидит - это задница полная.
1) постоянно надо жать F5 чтобы видеть текущую картинку
2) просмотреть чужие факсы(картинки) нельзя, только перезапустить или удалить задание.
и т.д. и т.п.
(это на Win10 он еще увидит "чего-то", а на Win7 какой-нибудь он и этого "чего-то" кажется не увидит, про баги эти было куча срача на разных форумах).
По этой и ряду других причин сервис надо запускать от D\Dmitry а не от D\Метафизический пользователь.
Если сервис генерит факсы от имени D\Dmitry, то D\Dmitry комфортно сидя за компом видит весь процесс в Outbox\Sent в "Факсы и сканирование Windows" в реальном времени, как будто он сам их "ручками" посылает. Понятно, что D\Вася уже этих факсов не увидит, но D\Dmitry и D\Вася вполне могут договориться меж собой, кто за всем этим следит, и от имени кого из них запускать сервис.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518658
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Сон Веры Павловны]Дмитрий77Обычно всю сервисную логику выносят в отдельную сборку. И в солюшене, таким образом, 3 проекта: class library со всей логикой, консольное приложение для тестирования , и собственно приложение-сервис, в котором есть только сервис-инсталлер и запускалка сервиса. И никаких проблем с тестированием.
Ну, по сути то это несильно отличается, от того что я использую.
Есть "консольное приложение для тестирования" (или даже не консольное, я люблю использовать скрытую форму)
Есть NSSM, который "сервис-инсталлер и запускалка сервиса" + к нему еще sc и/или API, чтоб чего-нибудь "подрихтовать", типа автозапуска или того же пользователя.
Ну не буду я полюбому этим InstallUtil пользоваться с его индусским окном.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518676
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77А проект .Net "Windows Service" хотя бы умееет запускаться как просто exe?
Если не умеет, то это как минимум гимор при тестировании.

Умеет.

Дмитрий77Честно, не вижу смысла этой кухни. За ради в журнал Windows через EventLog мусорить?

Серьёзно? Вся разница между приложением и сервисом это возможность писать в EventLog?



Дмитрий77Ну, самый разумный в моем случае вариант.
1) При инсталляции ставить модуль как "приложение" (чтоб некрасиво не было из-за "окон ввода пароля") под текущего пользователя.
Под "всех пользователей" нельзя, на multi-user системе (сервере) будет бардак.
2) В настройках иметь опцию "запускать как сервис", где предлагать ввод пользователя/пароля с подстановкой текущего пользователя (предполанается вызов "As Admin") с объяснением почему именно пользователя в диалоге ввода пароля (кратко) и хэлпе (поподробней). Диалог свой естественно, без вариантов. Использовать API, а не sc - иначе хрен отследишь что процедура установки прошла корректно.

Отличный вариант. Мы так делали.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518677
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Использовать API, а не sc - иначе хрен отследишь что процедура установки прошла корректно.

Почему хрен отследишь, запускаем команду, смотрим код возврата. Но можно и через API.
...
Рейтинг: 0 / 0
Запуск службы "с учетной записью пользователя".
    #39518714
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного от слов к делу к коду

Дмитрий77предлагать ввод пользователя... с подстановкой текущего пользователя
Тек. пользователь в нужной форме записи вроде так корректно вычисляется
Код: vbnet
1.
System.Security.Principal.WindowsIdentity.GetCurrent().Name


Для меня вычисляет D\Dmitry
На всяк. случай поигрался-почитал доки,
для SYSTEM надо тупо писать "LocalSystem"
для Network Service надо тупо писать "NT AUTHORITY\NetworkService"
(этих двоих оно в этом написании корректно съест вне зависимости от локализации)

hVosttДмитрий77Использовать API, а не sc - иначе хрен отследишь что процедура установки прошла корректно.Почему хрен отследишь, запускаем команду, смотрим код возврата. Но можно и через API.
Ну, м.б. и отследишь, но ИМХО это извращение, когда знаешь как сделать по нормальному.
Короче накатал пока ф-цию начерно.
Каюсь, воспользовался ServiceController sc.WaitForStatus(ServiceControllerStatus в чисто API-шном коде да еще и "между строк".
(API заразы при старте-стопе сервиса сразу возвращают, WaitForStatus очевидно какой-нибудь Do..Loop делает, да и хрен бы с ним)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
 Public Function SetServiceUserAccount(ByRef err_text As String, _
   ByVal ServiceName As String, Optional ByVal ServiceStartName As String = vbNullString, _
   Optional ByVal Password As String = vbNullString) As Boolean
    SetServiceUserAccount = True
    Dim sc As New ServiceController(ServiceName)

    ' Get a handle to the SCM database. 
    Dim schSCManager As IntPtr = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_ALL_ACCESS)
    If schSCManager = IntPtr.Zero Then
      SetServiceUserAccount = False
      err_text = "OpenSCManager Error " & RaiseAPIError()
      GoTo ToExit
    End If

    ' Get a handle to the service.
    Dim schService As IntPtr = OpenService(schSCManager, ServiceName, SERVICE_ALL_ACCESS) ' SERVICE_CHANGE_CONFIG
    If schService = IntPtr.Zero Then
      SetServiceUserAccount = False
      err_text = "OpenService Error " & RaiseAPIError()
      GoTo ToExit
    End If

    ' надо б остановить если запущен, потом же проверять придется
    Dim Status As SERVICE_STATUS

    ' Query Service Status
    If QueryServiceStatus(schService, Status) = False Then
      SetServiceUserAccount = False
      err_text = "QueryServiceStatus Error " & RaiseAPIError()
      GoTo ToExit
    End If

    If Status.dwCurrentState <> SERVICE_STOPPED Then
      ' Stop the service
      If ControlService(schService, SERVICE_CONTROL_STOP, Status) = False Then
        SetServiceUserAccount = False
        err_text = "ControlService Error " & RaiseAPIError()
        GoTo ToExit
      End If
      sc.WaitForStatus(ServiceControllerStatus.Stopped, New TimeSpan(0, 0, 10))
    End If

    ' Change the service account name
    If ChangeServiceConfig(schService, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, _
     , , , , ServiceStartName, Password, ) = False Then
      SetServiceUserAccount = False
      err_text = "ChangeServiceConfig Error " & RaiseAPIError()
      GoTo ToExit
    End If

    ' Надо б проверить, а вдруг с паролем ошиблись?
    ' Start the service
    If StartService(schService, 0, IntPtr.Zero) = False Then
      SetServiceUserAccount = False
      err_text = "StartService Error " & RaiseAPIError()
      GoTo ToExit
    End If
    sc.WaitForStatus(ServiceControllerStatus.Running, New TimeSpan(0, 0, 10))

    ' Stop the service
    If ControlService(schService, SERVICE_CONTROL_STOP, Status) = False Then
      SetServiceUserAccount = False
      err_text = "ControlService Error " & RaiseAPIError()
      GoTo ToExit
    End If
    sc.WaitForStatus(ServiceControllerStatus.Stopped, New TimeSpan(0, 0, 10))

ToExit:
    If schService <> IntPtr.Zero Then CloseServiceHandle(schService)
    If schSCManager <> IntPtr.Zero Then CloseServiceHandle(schSCManager)
  End Function


Допиливать видимо придется, когда имплементиовать буду, но принципиально оно чего надо делает.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск службы "с учетной записью пользователя".
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]