Служба Windows запускает настольную программу в Remote Desktop - PullRequest
0 голосов
/ 11 мая 2011

Мне нужно запустить программу на удаленном рабочем столе, эта программа открывает окно и требует взаимодействия с пользователем, но мое приложение является службой Windows.

Я использую Windows 2008. Я успешно создала приложениено запуск программы только сессия соединиться с мышью, клавиатурой, но мне нужно запустить в RDP.

Теперь я использую эти функции.

WTSEnumerateSessions (enum all sessions, here I know if RDP)
WTSQueryUserToken (Get user token)
DuplicateTokenEx ( make a primary token)
CreateProcessAsUser (run application with SI.lpDesktop = _T("winsta0\\default"))

Но это только успешная работа для запуска приложения вКонсоль подключается к клавиатуре, мыши, монитору, а не RDP.

В любом случае, можете мне помочь?спасибо.

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Итак, вы пытаетесь запустить приложение с графическим интерфейсом в определенном сеансе RDP на компьютере?У вас есть правильная идея, более или менее, хотя вы можете пропустить несколько частей.Взгляните на класс ProcessHelper в источнике для автоматизированных тестов библиотеки Cassia .Вы можете удалить большую часть управляемого кода для использования в C ++.Вы также можете пропустить бессмысленную ерунду GetTokenInformation (... TokenInformationClass.TokenLinkedToken ...), если вам не нужно запускать процесс с повышенными разрешениями.Этот код был протестирован на каждой версии Windows начиная с Windows XP.

Обратите также внимание, что для вызова WTSQueryUserToken требуется привилегия SE_TCB_NAME (которая по умолчанию имеет учетную запись LocalSystem).

0 голосов
/ 14 мая 2011

Хорошо, спасибо Дэн Портс

Это решило мою проблему.

Проблема в разрешениях.Я настраиваю эти три разрешения.

SetPrivilege(hpToken, SE_ASSIGNPRIMARYTOKEN_NAME, TRUE);
SetPrivilege(hpToken, SE_INCREASE_QUOTA_NAME, TRUE);
SetPrivilege(hpToken, SE_TCB_NAME, TRUE);

Примечание. Созданная мной функция SetPrivilege.

И работа в порядке.Еще раз спасибо.

...