10

Я использую программу "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 );
}

Вернет ЛОЖЬ? (Не вопрос программирования! Просто пример того, как программы обнаруживают, находятся ли они в сеансе терминального сервера!)

4 ответа4

7

Существует несколько способов проверить, работает ли приложение в сеансе сервера терминалов. Некоторые из них вы можете взломать, как показано ниже:

  1. Реестр: HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat .
    Этот ключ отсутствует в обычном сеансе на моем рабочем столе.
    Вы можете попытаться удалить его, если можете.
  2. Значения переменных среды SESSIONNAME: Console / "RDP #" / (пусто).
    Вы можете попытаться запустить игру из командной строки (cmd) после выполнения
    SET SESSIONNAME=Console (значение моего рабочего стола) или SET SESSIONNAME= (пусто).
    Чтобы узнать его текущее значение, введите SET SESSIONNAME прежде чем что-либо менять.
  3. Системные вызовы GetSystemMetrics (SM_REMOTESESSION) и GetVersionEx (OSVERSIONINFOEX.wSuiteMask) возвращают контекст выполнения.
    Вы не можете ничего сделать против этого, кроме написания системного хука для этого.
    Если интересно, посмотрите эту статью на codeproject.com: выявлена перехват API .
5

Это Miniframe, разработчики SoftXpand Duo. Мы рекомендуем заглянуть в нашу Базу знаний за рекомендациями по устранению ошибки при запуске SoftXpand Duo в сеансе сервера терминалов:

Как устранить ошибку "Не удается запустить в сеансе сервера терминалов"

0

Я использую Microsoft Remote Desktop и попробовал первые 2 метода, опубликованные @harrymc, но они не работают в моем случае. Третий слишком сложен для меня, поэтому я не попробовал.

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

0

Я нашел решение: запуск нужных программ с помощью "runas"

После входа через рабочий стол введите это в cmd:

runas /user:YOUR_NAME "YOUR_PROGRAM_PATH"

Я проверил это на программном обеспечении Bently, и они работают хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .