А расскажите мне например про легкий и быстрый способ
бросить курить пить и жить узнать, работает ли мой код внутри сервиса (который как известно запрещает по умолчанию общаться с пользовательским десктопом, но может и разрешить посредством флага SERVICE_INTERACTIVE_PROCESS) или внутри обычной пользовательской проги и я могу соотв-но показывать всякое ?
Есличо я в курсе за ф-цию
WTSGetActiveConsoleSessionId - это совсем не про то что нужно. Начиная с висты в
user32.dll есть также малодокументированная ф-ция _UserTestTokenForInteractive - оно уже больше на правду похоже, но мне и под xp/w2k3 нужно и еще для Terminal Server
0) GetModuleHandle(L"user32.dll")
ОтветитьУдалить1) GetDC(0)
если получилось значит либо виста/7(в т.ч 0 сессия) либо интерактивный сервис XP
2) GetVersionEx
3) GetProcessToken + GetTokenInformation + TokenSessionId. не пугаем юзверя если старше висты и 0 сессия
пойдет?
cмахивает на грязный хак
ОтветитьУдалитьпроще тогда уже
1) определяем своего папашу
2) если не services.exe - нам можно
3) иначе запрашиваем из scm флаги. если содержат SERVICE_INTERACTIVE_PROCESS - нам тоже можно
4) иначе нельзя
но и это тоже грязный хак
А казалось бы такая простая задача...
бгг это пока кто-то не назовется так же
ОтветитьУдалитьили пока на какой нибудь windows 15 services.exe не захочет создавать процесс сам, а будет его делать через какой нибудь хелпер
алсо флаги у сервиса можно сменить без рестарта оного
еcли наш папаша не настоящий services - scm нам не отдаст ничего вразумительного, так шо тут все хорошо
ОтветитьУдалитьФлаги да, можно сменить :-(
http://www.codeguru.com/forum/showpost.php?p=1758071&postcount=4
ОтветитьУдалитьОно или нет? По крайней мере на основе это функции реализован Environment.UserInteractive
спасибо, внезапно похоже на правду
ОтветитьУдалитьнадо еще под TS проверить