Windows: Как заставить программы думать, что они не работают в сеансе сервера терминалов?
Я использую программу "SoftXPand 2011 Duo" от Miniframe на моем ПК с Windows 7. Это делает две рабочие станции из одного компьютера. Он использует терминальные сервисы, встроенные в Windows, для создания дополнительного сеанса. Я использую два экрана, две клавиатуры и две мыши, чтобы создать эту "иллюзию" двух компьютеров. Он работает довольно хорошо, и я даже могу играть в две разные 3D-игры на двух экранах, подключенных к этой машине (используя Radeon HD5770 и Core i5 2500k с 8 Гбайт ОЗУ).
Есть несколько минусов в этом. Я только что нашел один, который спрятан на первый взгляд. Сеансы, в которых вы находитесь (даже на первой рабочей станции), будут идентифицироваться как сеанс сервера терминалов! Теперь некоторые программы будут работать с ограниченными эффектами (графическими), а некоторые вообще не будут работать.
Это также привело к тому, что некоторые игры вообще не запускались. Они просто говорят "Невозможно запустить в сеансе сервера терминалов" и завершают работу. Я уже доказал, что лучшие современные игры (DirectX 10, 11) работают так же хорошо, как и на той же машине без SoftXPand, так что это довольно искусственное ограничение!
Итак, могу ли я каким-то образом взломать мой текущий сеанс, чтобы он больше не выглядел как сеанс сервера терминалов? IE
#include <windows.h>
#pragma comment(lib, "user32.lib")
BOOL IsRemoteSession(void)
{
return GetSystemMetrics( SM_REMOTESESSION );
}
Вернет ЛОЖЬ? (Не вопрос программирования! Просто пример того, как программы обнаруживают, находятся ли они в сеансе сервера терминалов!)
5 ответов
Это Miniframe, разработчики SoftXpand Duo. Мы рекомендуем заглянуть в нашу Базу знаний за рекомендациями по устранению ошибки при запуске SoftXpand Duo в сеансе сервера терминалов:
Как устранить ошибку "Не удается запустить в сеансе сервера терминалов"
Существует несколько способов проверить, работает ли приложение в сеансе сервера терминалов. Некоторые из них вы можете взломать, как показано ниже:
- Реестр:
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat
,
Этот ключ отсутствует в обычном сеансе на моем рабочем столе.
Вы можете попытаться удалить его, если можете. - Значения переменных среды SESSIONNAME: Консоль / "RDP#" / (пусто).
Вы можете попытаться запустить игру из командной строки (cmd) после выполненияSET SESSIONNAME=Console
(ценность моего рабочего стола) илиSET SESSIONNAME=
(Пусто).
Чтобы узнать его текущее значение, введитеSET SESSIONNAME
прежде чем что-то менять. - Системные вызовы GetSystemMetrics(SM_REMOTESESSION) и GetVersionEx ( OSVERSIONINFOEX.wSuiteMask) возвращают контекст выполнения.
Вы не можете ничего сделать против этого, кроме написания системного хука для этого.
Если интересно, посмотрите эту статью на codeproject.com: выявлена перехват API.
Я использую Microsoft Remote Desktop и попробовал первые 2 метода, опубликованные @harrymc, но они не работают в моем случае. Третий слишком сложен для меня, поэтому я не попробовал.
В конце концов я обнаружил, что Parallel Access позволяет мне использовать программу, которая показала ошибку. Это не так гладко, как RDP, поэтому я использую его, если мне действительно нужно использовать программу.
Я нашел решение: запуск нужных вам программ с помощью "runas"
После входа через рабочий стол введите это в cmd:
runas / user: YOUR_NAME "YOUR_PROGRAM_PATH"
Я проверил это на программном обеспечении Bently, и они работают хорошо.
Не касается вопроса SoftXPand напрямую, но я оказался здесь из-за поиска в Google, и это соответствует ответу @harrymc.
Я создал пакетный файл с задержкой 60 секунд, а затем запускаю приложение, которое хочу запустить. Я запустил командный файл, вышел из RDP-соединения, подождал около 5 минут, а затем снова подключился по RDP. Надоедливое приложение, которое я хотел, ждало меня, когда я снова включился. Вот содержимое пакетного файла:
timeout 60
start /D "your path here" yourExecutable.exe
Кавычки вокруг пути необходимы, если в пути есть пробелы.
Получил информацию о пакете отсюда: https://stackoverflow.com/questions/8324352/creating-a-batch-file-for-programs-to-start-using-a-delay
реквизит этому парню: rschmidt13
(в нем сказано предоставить подробную информацию и поделиться моими исследованиями)