Windows: Como fazer com que os programas achem que não estão sendo executados em uma sessão do servidor de terminal?

9

Estou usando o programa "SoftXPand 2011 Duo" da Miniframe no meu PC com Windows 7. Faz duas estações de trabalho fora de um computador. Ele usa os serviços de terminal incorporados no Windows para criar a sessão adicional. Eu uso duas telas, dois teclados e dois mouses para criar essa "ilusão" de dois computadores. Funciona muito bem e eu posso até jogar dois jogos 3D diferentes nas duas telas anexadas a esta máquina (usando uma Radeon HD5770 e um Core i5 2500k com 8 Gbytes de RAM).

Existem algumas desvantagens nisso. Acabei de encontrar um que está escondido no primeiro olhar. As sessões em que você está (mesmo na primeira estação de trabalho) serão identificadas como uma sessão do servidor de terminal! Agora, alguns programas serão executados com efeitos limitados (gráficos) e alguns não serão executados.

Isso também resultou em alguns jogos não sendo executados. Eles apenas dizem "Não pode ser executado em uma sessão do servidor de terminal" e sair. Eu já provei que os jogos modernos (DirectX 10, 11) funcionam tão bem quanto na mesma máquina sem o SoftXPand, então isso é uma limitação bastante artificial!

Então, posso hackear minha sessão atual para que ela não pareça mais uma sessão do servidor de terminal? I. E.

#include <windows.h>
#pragma comment(lib, "user32.lib")

BOOL IsRemoteSession(void)
{
   return GetSystemMetrics( SM_REMOTESESSION );
}

Irá retornar FALSE? (Não é uma questão de programação! Apenas um exemplo de como os programas detectam se estão em uma sessão do servidor de terminal!)

    
por sinni800 24.06.2011 / 11:41

4 respostas

5

Este é o Miniframe, os desenvolvedores do SoftXpand Duo. Sugerimos que você consulte nossa Base de Conhecimento para obter uma recomendação sobre como resolver o erro ao executar o SoftXpand Duo em uma sessão do Terminal Server:

How to resolve the error "Cannot be run in a terminal server session"

    
por 04.07.2011 / 15:53
7

Existem várias maneiras de um aplicativo verificar se ele está sendo executado em uma sessão do Terminal Server. Alguns deles você pode hackear, como abaixo:

  1. Registro: HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat .
    Esta chave está faltando em uma sessão normal na minha área de trabalho.
    Você pode tentar excluí-lo, se puder.
  2. Valores da variável de ambiente SESSIONNAME: Console / "RDP #" / (vazio).
    Você pode tentar executar o seu jogo a partir do Prompt de Comando (cmd) depois de executar SET SESSIONNAME=Console (meu valor de desktop) ou SET SESSIONNAME= (vazio).
    Para descobrir seu valor atual, insira SET SESSIONNAME antes de alterar qualquer coisa.
  3. O sistema chama GetSystemMetrics (SM_REMOTESESSION) e GetVersionEx ( OSVERSIONINFOEX.wSuiteMask ) retorna o contexto de execução.
    Não há muito o que você pode fazer contra esse, exceto escrever um system-hook para ele.
    Se estiver interessado, consulte este artigo do codeproject.com: Revelação da API .
por 27.06.2011 / 21:43
0

Eu encontrei uma solução: executando os programas que você quer por "runas"

Depois de fazer login pela área de trabalho, digite em cmd:

runas / user: YOUR_NAME "YOUR_PROGRAM_PATH"

Testei-o contra os softwares do Bently e eles funcionam bem.

    
por 17.06.2014 / 10:00
0

Estou usando o Microsoft Remote Desktop e experimentei os dois primeiros métodos postados pelo @harrymc, mas eles não funcionam no meu caso. O terceiro é muito complicado para mim, então eu não tentei.

No final, descobri que o Parallel Access permite que eu use o programa que estava mostrando o erro. Não é tão suave quanto o RDP, então eu o uso se realmente tiver que usar o programa.

    
por 27.09.2016 / 23:58