powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Имя пользователя при запуске приложения сервисом
24 сообщений из 24, страница 1 из 1
Имя пользователя при запуске приложения сервисом
    #39662121
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приложение запускается сервисом.
Запрос GetUserName() к Windows возвращает строку "система", что верно. Это под моей Win7 Pro (rus).
Подозреваю, что при работе с другими ОС (и языковыми настройками) значение будет иным.

Вопрос: как достоверно определить, что программы работает именно под юзером "система"?
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662123
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__Подозреваю, что при работе с другими ОС (и языковыми настройками) значение будет инымПравильно подозреваешь
чччД__Вопрос: как достоверно определить, что программы работает именно под юзером "система"?А тебе зачем? А если я создам пользователя ServiceRunner и буду все службы запускать от него - все пропало?

Какая задача решается?
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662125
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_...
чччД__Вопрос: как достоверно определить, что программы работает именно под юзером "система"?А тебе зачем? А если я создам пользователя ServiceRunner и буду все службы запускать от него - все пропало?

Какая задача решается?

2. Ну, логи хочу в файлик направлять, а не в окошко.
1. Да, все пропало, выходит. Нужно как-то грамотно вычислить, что графическая подсистема недоступна, чтобы (см.2)
0. Можно, конечно, при запуске приложения сообщать ему, что "из-под сервиса", что ли (ключ в командной строке. например)...
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662127
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__Вопрос: как достоверно определить, что программы работает именно под юзером "система"?

Ну, если не начинать дебаты "а назачем", то, например, GetUserNameEx(NameUniqueId). Можно
пойти дальше до
https://stackoverflow.com/questions/251248/how-can-i-get-the-sid-of-the-current-windows-account
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662131
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18.06.2018 18:54, чччД__ пишет:
> 2. Ну, логи хочу в файлик направлять, а не в окошко.

вот до чего доводит отсутствие контрацепции при общении с "великим оптимизатором"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662134
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну можешь проверять кто запустил (т.е. породивший
процесс, а не юзернейм). Хотя и это не 100%, наверное.

чччД> 2. Ну, логи хочу в файлик направлять, а не в окошко.

Всегда направляй в файл, а в GUI-варианте форма пусть
просто читает из соотв. файла.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662139
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам...
Всегда направляй в файл, а в GUI-варианте форма пусть
просто читает из соотв. файла.

...надо сперва узнать, какой вариант использовать - gui или нет.
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662140
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__....надо сперва узнать, какой вариант использовать - gui или нет.

Можно попробовать сначала GetProcessWindowStation(), а потом
GetUserObjectInformation(UOI_FLAGS) и проверять WSF_VISIBLE.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662141
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД> ...надо сперва узнать, какой вариант использовать - gui или нет.

Не надо. Всегда в файл, а в GUI-варианте юзер откроет форму.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662166
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийвот до чего доводит отсутствие контрацепции при общении с "великим оптимизатором"...

бгг, про него же подумал
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662275
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__, в win7 и выше сервис не может взаимодействовать с рабочим столом. Соответственно, не нужно определять под кем работает приложение. Нужно определить, запущено приложение как сервис или нет.
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662281
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45чччД__, в win7 и выше сервис не может взаимодействовать с рабочим столом. Соответственно, не нужно определять под кем работает приложение. Нужно определить, запущено приложение как сервис или нет. хм, не вникал глубоко
но, ради истины, например, одна из программ Руссиновича вполне позволяет это сделать:
Код: plaintext
PsExec64.exe -i -d -s regedit

хотя конечно это не гуд, сервисы не должны использовать гуи без крайне крайней необходимости
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662291
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45, kealon(Ruslan),

- и откуда вы, такие умные?
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662347
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__,

По идее можно посмотреть имя процесса-родителя. Если это services.exe - то мы в режиме сервиса. Сервисы в системе запускает имено он.
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662352
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__Нужно как-то грамотно вычислить, что графическая подсистема недоступна, чтобы (см.2)Вот с этого и начинай.

Попробуй так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function IsGUIAvailable: Boolean;
var
  Buf: PWTS_CONNECTSTATE_CLASS;
  Len: Cardinal;
begin
  Win32Check(WTSQuerySessionInformation(
    WTS_CURRENT_SERVER_HANDLE,
    WTS_CURRENT_SESSION,
    WTSConnectState,
    Buf,
    Len
  ));
  try
    Result := Buf^ = WTSActive;
  finally
    WTSFreeMemory(Buf);
  end;
end;
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662410
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster> По идее можно посмотреть имя процесса-родителя.
DarkMaster> Если это services.exe - то мы в режиме сервиса.

Я это ему выше и подсказал. Но он, редиска, поиздеваться любит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662414
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Я для этой цели такую портянку когда-то написал. Мне помогло:

Код: pascal
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.
function IsService( var bIsService: BOOL; var dwError: DWORD ): BOOL;
type
  LONG = LongInt;

  LUID = record
    LowPart:  DWORD;
    HighPart: LONG;
  end;

  TOKEN_TYPE = TTokenType;
  SECURITY_IMPERSONATION_LEVEL = ( SecurityAnonymous, SecurityIdentification, SecurityImpersonation, SecurityDelegation );

  TOKEN_STATISTICS = record
    TokenId:            LUID;
    AuthenticationId:   LUID;
    ExpirationTime:     LARGE_INTEGER;
    TokenType:          TOKEN_TYPE;
    ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL;
    DynamicCharged:     DWORD;
    DynamicAvailable:   DWORD;
    GroupCount:         DWORD;
    PrivilegeCount:     DWORD;
    ModifiedId:         LUID;
  end;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = ( Value: ( 0, 0, 0, 0, 0, 5 ) );
  SECURITY_SERVICE_RID = 6;

  SYSTEM_LUID:          LUID = ( LowPart: $3E7; HighPart: $0 );
  ANONYMOUS_LOGON_LUID: LUID = ( LowPart: $3E6; HighPart: $0 );
  LOCALSERVICE_LUID:    LUID = ( LowPart: $3E5; HighPart: $0 );
  NETWORKSERVICE_LUID:  LUID = ( LowPart: $3E4; HighPart: $0 );

  function EqualLuid( const l1, l2: LUID ): Boolean;
  begin
    Result := ( l1.LowPart = l2.LowPart ) and ( l1.HighPart = l2.HighPart );
  end;

var
  hToken: THandle;
  dwSize: DWORD;
  ts: TOKEN_STATISTICS;
begin
  Result := False;
  if not OpenProcessToken( GetCurrentProcess, TOKEN_QUERY or TOKEN_QUERY_SOURCE, hToken ) then begin
    dwError := GetLastError;
    Exit;
  end;

  try
    dwSize := 0;
    if not GetTokenInformation( hToken, TokenStatistics, @ts, sizeof( ts ), dwSize )  then begin
      dwError := GetLastError;
      Exit;
    end;

    Result := True;
    bIsService := EqualLuid( ts.AuthenticationId, SYSTEM_LUID )
                  or
                  EqualLuid( ts.AuthenticationId, LOCALSERVICE_LUID )
                  or
                  EqualLuid( ts.AuthenticationId, NETWORKSERVICE_LUID );
  finally
    CloseHandle( hToken );
  end;
end;

...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662422
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проктостоматологи.

То, что приложение запущено из сервиса, не означает невозможности вывести пользователю
сообщение - сервис мог подключиться к оконной станции пользователя.

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

По моим ссылкам выше всё описано.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662425
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Код: pascal
1.
2.
3.
4.
5.
    bIsService := EqualLuid( ts.AuthenticationId, SYSTEM_LUID )
                  or
                  EqualLuid( ts.AuthenticationId, LOCALSERVICE_LUID )
                  or
                  EqualLuid( ts.AuthenticationId, NETWORKSERVICE_LUID );

_Vasilisk_А если я создам пользователя ServiceRunner и буду все службы запускать от него - все пропало?
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662428
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТо, что приложение запущено из сервиса, не означает невозможности вывести пользователю
сообщение - сервис мог подключиться к оконной станции пользователя.Именно. Поэтому я решаю проблему именно доступности GUI
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662429
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_А если я создам пользователя ServiceRunner и буду все службы запускать от него - все пропало?
Не знаю :)
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662441
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов РустамчччД> ...надо сперва узнать, какой вариант использовать - gui или нет.

Не надо. Всегда в файл, а в GUI-варианте юзер откроет форму.

Во-первых, переделывать не хочется и все давно работает.
Во-вторых, сие лишь частный случай.

Например, сервис стартует мое приложение, которое генерит MS Excel файлы. Раньше ("в соответствии с ТЗ") созданные файлы "автоматически" открывались в приложении, ассоциированном с .xls/.xlsx.
Теперь, если их открыть, иксель/опенофис/... просто будет висеть в процессах, никто созданную красоту не увидит.

В-третьих, да, может и не из-под сервиса.
Т.е., все же чччД__...Нужно как-то грамотно вычислить, что графическая подсистема недоступна...
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662454
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда вон Василиск тебе выше подсказал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имя пользователя при запуске приложения сервисом
    #39662467
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов РустамНу тогда вон Василиск тебе выше подсказал.

Да я все вижу, я обеда жду.
Потом с новыми силами начну пытаться.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Имя пользователя при запуске приложения сервисом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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