web-dev-qa-db-ja.com

Windows:プログラムにターミナルサーバーセッションで実行していないと思わせる方法は?

Windows 7 PCでMiniframeのプログラム「SoftXPand 2011 Duo」を使用しています。 1台のコンピューターから2台のワークステーションを作成します。 Windowsに組み込まれているターミナルサービスを使用して、追加のセッションを作成します。私は2つの画面、2つのキーボード、および2つのマウスを使用して、2つのコンピューターのこの「幻想」を作成します。それは非常にうまく機能し、この1台のマシンに接続された2つの画面で2つの異なる3Dゲームをプレイすることもできます(Radeon HD5770と8GバイトRAMのCore i5 2500kを使用)。

これにはいくつかの欠点があります。見た目で隠れているものを発見しました。現在のセッション(最初のワークステーション上でも)は、ターミナルサーバーセッションとして識別されます。現在、一部のプログラムは限られた効果(グラフィック)で実行され、一部はまったく実行されません。

これにより、一部のゲームがまったく動作しなくなりました。 「ターミナルサーバーセッションでは実行できません」と言って終了します。私はすでに、最新のトップゲーム(DirectX 10、11)がSoftXPandなしの同じマシン上で同じように動作することを証明しているため、これはかなり人為的な制限です!

では、どうやら現在のセッションをハッキングして、ターミナルサーバーセッションのように見えないようにできますか? I. E.

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

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

FALSEを返しますか? (プログラミングの質問ではありません。プログラムがターミナルサーバーセッションにあるかどうかを検出する例にすぎません!)

11
sinni800

アプリケーションがターミナルサーバーセッションで実行されているかどうかを確認するには、いくつかの方法があります。以下のように、ハッキングする可能性のあるもののいくつか:

  1. レジストリ:HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat
    このキー がデスクトップの通常のセッションで見つかりません。
    可能であれば、削除してみてください。
  2. SESSIONNAME環境変数の値:コンソール/ "RDP#" /(空)。
    コマンドプロンプト(cmd)からゲームを実行してみてください。
    SET SESSIONNAME=Console(デスクトップの値)またはSET SESSIONNAME=(空)。
    現在の値を確認するには、何も変更する前にSET SESSIONNAMEを入力します。
  3. システムコールは GetSystemMetrics(SM_REMOTESESSION) および GetVersionExOSVERSIONINFOEX.wSuiteMask )は実行コンテキストを返します。
    システムフックを作成することを除いて、これに対してできることは多くありません。
    興味がある場合は、このcodeproject.comの記事をご覧ください: APIフックが明らかになりました .
9
harrymc

これはSoftXpand Duoの開発者であるMiniframeです。ターミナルサーバーセッションでSoftXpand Duoを実行してエラーを解決する方法に関する推奨事項については、ナレッジベースを参照することをお勧めします。

「ターミナルサーバーセッションでは実行できません」というエラーを解決する方法

5
Miniframe

Microsoftリモートデスクトップを使用していて、@ harrymcによって投稿された最初の2つの方法を試しましたが、私の場合は機能しません。 3番目は複雑すぎるので、試してみませんでした。

最終的に、Parallel Accessを使用すると、エラーを表示していたプログラムを使用できることがわかりました。 RDPほどスムーズではないので、本当にプログラムを使用する必要がある場合は、RDPを使用します。

0
Lewen

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

この男の小道具: https://stackoverflow.com/users/959263/raihan

(詳細を提供し、私の研究を共有すると言われています)

0
LargoBoom

解決策を見つけました:「runas」で必要なプログラムを実行します

デスクトップ経由でログインした後、それをcmdに入力します。

runas/user:YOUR_NAME "YOUR_PROGRAM_PATH"

私はBentlyのソフトウェアに対してそれをテストしました、そしてそれらはうまく働きます。

0
AqD