Windows: Як змусити програми думати, що вони не працюють на сервері терміналу?


11

Я використовую програму "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 );
}

Поверне ФАЛЬСУ? (Не питання програмування! Просто приклад того, як програми виявляють, чи перебувають вони на сеансі термінального сервера!)


У вас є дві клавіатури / екрани? Будь ласка, детальніше розкажіть про налаштування.
harrymc

@harrymc Так, так. Редагування.
sinni800

Причина, що програми відмовляються запускатись на термінальному сервері, навіть коли ви використовуєте консольний сеанс, пов’язана з причинами ліцензування - так що однією ліцензією не може користуватися більше ніж одна людина одночасно.
парадороїд

Відповіді:


9

Існує кілька способів перевірити, чи працює програма в сеансі сервера терміналів. Деякі з них ви можете зламати, як показано нижче:

  1. Реєстр: HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat.
    Ця клавіша відсутня в звичайному сеансі на моєму робочому столі.
    Ви можете спробувати її видалити, якщо можете.
  2. Значення змінних середовища SESSIONNAME: консоль / "RDP #" / (порожнє).
    Ви можете спробувати запустити свою гру з командного рядка (cmd) після виконання
    SET SESSIONNAME=Console(значення мого робочого столу) або SET SESSIONNAME=(порожнє).
    Щоб дізнатися його поточне значення, введіть, SET SESSIONNAMEперш ніж щось змінювати.
  3. Виклики системи GetSystemMetrics (SM_REMOTESESSION) та GetVersionEx ( OSVERSIONINFOEX.wSuiteMask ) повертають контекст виконання.
    Проти цього можна не багато, окрім того, як написати системну гачку для цього.
    Якщо зацікавлені, дивіться цю статтю codeproject.com: виявлено підключення API .

На 2) назва сеансу - "консоль" (What heck?). Ключовий TSAppCompat також відсутній. О третьому ... Виглядає важко. Чи не існує програми, яка сидить поверх іншої програми і перехоплює системні виклики, як та, про яку я згадав? GetSystemMetrics.
sinni800

За вашою інформацією, ймовірно, третій метод варто атакувати для GetVersionEx та GetSystemMetrics. Я додав посилання вище (для використання програмістом).
harrymc

Ще одна примітка: Якщо у SoftXPand існує спосіб використання MSTSC / admin , варто спробувати.
harrymc

@harrymc чому MSTSC / admin? Я загляну в підключення до api ... Це може бути занадто складним для моїх здібностей програмування.
sinni800

"MSTSC / admin" - досить тривалий знімок: це дещо інший тип віддаленого сеансу, тому, можливо, деякі програми можуть його не виявити.
harrymc

0

Я знайшов рішення: запустивши потрібні програми за допомогою "runas"

Після входу через робочий стіл введіть його у cmd:

runas / користувач: YOUR_NAME "YOUR_PROGRAM_PATH"

Я перевірив його на програмне забезпечення Bently, і вони добре працюють.


Це обходить проблему сервера терміналів? Цікаво, я мушу спробувати.
sinni800

Не працює з масовим ефектом 3 (цю програму не можна запускати віддалено)
Mgamerz

0

Я використовую Microsoft Remote Desktop, і я спробував перші два способи, опубліковані @harrymc, але вони не працюють у моєму випадку. Третя занадто складна для мене, тому я не спробував цього.

Врешті-решт я виявив, що паралельний доступ дозволяє мені використовувати програму, яка показувала помилку. Це не так гладко, як RDP, тому я використовую його, якщо мені справді доведеться користуватися програмою.


0

Не стосується питання SoftXPand безпосередньо, але я опинився тут через пошук в Google, і це відповідь на адресу @ harrymc.

Я створив пакетний файл із затримкою на 60 секунд, а потім запускає додаток, який я хочу запустити. Я запустив пакетний файл, вийшов з мого з'єднання RDP, почекав близько 5 хвилин і потім знову з'єднався з RDP. Напористий додаток, який я хотів, чекав на мене, коли я повернувся. Ось вміст пакетного файлу:

timeout 60

start /D "your path here" yourExecutable.exe

Цитати навколо шляху необхідні, якщо у вас є пробіли.

Отримайте інформацію про пакетну інформацію тут: /programming/8324352/creating-a-batch-file-for-programs-to-start-using-a-delay

реквізит цього хлопця: https://stackoverflow.com/users/959263/raihan

(там сказано, щоб надати деталі та поділитися моїми дослідженнями)


Цікаве рішення, я не знаю, чи вдасться застосувати це до SoftXPand, якщо чесно. Оскільки я не можу "залишити" сеанс, як у RDP.
sinni800
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.