Windows: Comment faire en sorte que les programmes pensent qu'ils ne s'exécutent pas dans une session Terminal Server?


10

J'utilise le programme "SoftXPand 2011 Duo" de Miniframe sur mon ordinateur Windows 7. Il crée deux postes de travail sur un ordinateur. Il utilise les services de terminal intégrés à Windows pour créer la session supplémentaire. J'utilise deux écrans, deux claviers et deux souris pour créer cette "illusion" de deux ordinateurs. Cela fonctionne assez bien et je peux même jouer à deux jeux 3D différents sur les deux écrans connectés à cette seule machine (avec une Radeon HD5770 et un Core i5 2500k avec 8 Go de RAM).

Il y a quelques inconvénients à cela. Je viens de trouver à propos de celui qui est caché sur le premier regard. Les sessions dans lesquelles vous vous trouvez (même sur le premier poste de travail) seront identifiées comme une session de serveur de terminal! Maintenant, certains programmes fonctionneront avec des effets limités (graphiques) et d’autres pas du tout.

Cela a également eu pour conséquence que certains jeux ne fonctionnaient pas du tout. Ils disent simplement "Ne peut pas être exécuté dans une session de serveur de terminal" et se terminent. J'ai déjà prouvé que les meilleurs jeux modernes (DirectX 10, 11) fonctionnent aussi bien que sur la même machine sans SoftXPand, il s'agit donc d'une jolie limitation artificielle!

Alors, puis-je en quelque sorte pirater ma session actuelle pour qu'elle ne ressemble plus à une session de serveur de terminal? C'EST À DIRE.

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

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

Est-ce que retourne FALSE? (Ce n'est pas une question de programmation! Juste un exemple montrant comment les programmes détectent s'ils sont en session Terminal Server!)


Avez-vous deux claviers / écrans? S'il vous plaît élaborer un peu plus sur votre configuration.
harrymc

@ charrymc Oui, je le fais. Édition.
sinni800

La raison pour laquelle les applications refusent de s'exécuter sur un serveur Terminal Server, même lorsque vous utilisez la session de console, s'explique par des raisons de licence: une licence ne peut donc pas être utilisée par plus d'une personne à la fois.
paradroid

Réponses:


5

C'est Miniframe, les développeurs de SoftXpand Duo. Nous vous conseillons de consulter notre base de connaissances pour une recommandation sur la façon de résoudre l'erreur en exécutant SoftXpand Duo dans une session Terminal Server:

Comment résoudre l'erreur "Ne peut être exécuté dans une session Terminal Server"


Le lien ne fonctionne pas - miniframe.com/component/kb/article/… celui-ci fonctionne, cependant! Puis-je entrer dans plusieurs programmes en utilisant un point-virgule (;)? De plus, voici votre première 125 réputation sur SuperUser! :) J'ai aussi envoyé un e-mail pour cette question, je suis d * est @ e ot.de
sinni800

ce lien ne fonctionne pas non plus
bradgonesurfing

7

Une application peut vérifier si elle s'exécute dans une session Terminal Server de plusieurs manières. Vous pourriez en pirater quelques-uns, comme ci-dessous:

  1. Registre: HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat.
    Cette clé manque dans une session normale sur mon bureau.
    Vous pouvez essayer de le supprimer, si vous le pouvez.
  2. Valeurs de la variable d’environnement SESSIONNAME: Console / "RDP #" / (vide).
    Vous pouvez essayer d’exécuter votre jeu à partir de l’invite de commande (cmd) après avoir
    SET SESSIONNAME=Console (valeur de mon bureau) ou SET SESSIONNAME= (vide).
    Pour connaître sa valeur actuelle, entrez SET SESSIONNAME avant de changer quoi que ce soit.
  3. Le système appelle GetSystemMetrics (SM_REMOTESESSION) et GetVersionEx ( OSVERSIONINFOEX.wSuiteMask ) retourne le contexte d'exécution.
    Vous ne pouvez pas faire grand chose contre celui-ci, si ce n’est en écrivant un hook système.
    Si vous êtes intéressé, consultez cet article sur codeproject.com: API accrochage révélé .

Sur 2), le nom de la session est "console" (What the heck?). La clé TSAppCompat est manquante ici aussi. À propos de la troisième ... Cela semble difficile à faire. N'y a-t-il pas un programme qui se superpose à un autre programme et intercepte les appels système comme celui que j'ai mentionné? GetSystemMetrics.
sinni800

Selon vos informations, la 3ème méthode est probablement celle qui mérite d'être attaquée pour GetVersionEx et GetSystemMetrics. J'ai ajouté un lien ci-dessus (à utiliser par un programmeur).
harrymc

Autre remarque: s’il existe un moyen d’utiliser MSTSC / admin dans SoftXPand, cela vaut la peine d'essayer.
harrymc

@harrymc pourquoi MSTSC / admin? Je vais me pencher sur le branchement d'api ... Cela risque d'être trop complexe pour mes capacités de programmation.
sinni800

"MSTSC / admin" est un projet assez long: il s'agit d'un type de session à distance quelque peu différent, de sorte que certains programmes peuvent ne pas le détecter.
harrymc

0

J'ai trouvé une solution: exécuter les programmes que vous voulez avec "runas"

Après vous être connecté via le bureau, tapez cela dans cmd:

runas / user: YOUR_NAME "YOUR_PROGRAM_PATH"

Je l'ai testé contre les logiciels de Bently et ils fonctionnent bien.


Cela évite le problème du serveur terminal? Intéressant, je dois essayer.
sinni800

Ne fonctionne pas avec l'effet de masse 3 (ce programme ne peut pas être exécuté à distance)
Mgamerz

0

J'utilise Microsoft Remote Desktop et j'ai essayé les 2 premières méthodes publiées par @harrymc, mais elles ne fonctionnent pas dans mon cas. La troisième est trop compliquée pour moi, je ne l’ai donc pas essayée.

Finalement, j’ai trouvé que Parallel Access me permettait d’utiliser le programme qui montrait l’erreur. Ce n'est pas aussi lisse que RDP, donc je l'utilise si je dois vraiment utiliser le programme.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.