3

プログラムがターミナル サーバーにインストールされている場合、セットアップの動作が若干異なるはずです。私は知ってGetSystemMetrics(SM_REMOTESESSION)いますが、私が理解している限り、RDP セッション内で実行しているかどうかだけがわかります。サーバー管理者がローカルでログオンしてソフトウェアをインストールする場合は、キャッチされませんか?

リモートデスクトップが有効になっている場合、ターミナルサーバーサービスはワークステーションでも実行されるため、チェックすることもできません。これを、複数の同時ログオン セッションを許可する真の TS と区別する必要があります。

チェックする他のサービスまたはレジストリ キーはありませんか?

4

3 に答える 3

4

これはまさにあなたが必要とするものです:

ターミナル サービスがインストールされているかどうかの検出

これに加えて、GetVersion()の値を使用して、 NT を実行しているかどうかを判断できることに注意してください。NT でない場合は、救済します。

// Are we running Windows NT?
DWORD dwVersion = GetVersion();
if (!(dwVersion & 0x80000000)) {
    // Is it Windows 2000 or greater?
    if (LOBYTE(LOWORD(dwVersion)) > 4) {
        // Check with VerSetConditionMask() and VerifyVersionInfo()
        return ..;
    }
    else  {
        // Windows NT 4.0 or earlier. Check ProductSuite value in
        // HKLM\\System\\CurrentControlSet\\Control\\ProductOptions
        return ..;
    }
}

return false;

リンクは、バージョンが Win2k 以降であるかどうかを照会する必要があるコードを示しています

于 2009-05-26T10:54:22.040 に答える
3

Magnus Skog によって提供されたリンクのおかげで、InnoSetup が既にGetWindowsVersionExAPI 関数をサポートしていることを発見しました。したがって、私がしなければならなかったのはこれだけでした:

function IsRunningOnTS: Boolean;
var
  lWinVer: TWindowsVersion;
begin
  GetWindowsVersionEx(lWinVer);
  Result := (lWinVer.SuiteMask and VER_SUITE_TERMINAL) <> 0;
end;

次のシナリオでこれを正常にテストしました。

  • RDP が有効になっている XP ワークステーションにローカルでログオンしている (返されるFalse)
  • RDP 経由で Terminal Server にリモートでログオン ( を返すTrue)
  • RDP を介してワークステーションにリモートでログオン ( を返すFalse)

TS にローカルでログオンしているときにテストする機会はまだありませんでした。私が持っているときにこの投稿を更新します。

于 2009-05-26T12:49:18.250 に答える
1

私は、この質問には多くの答えの可能性があると推測していますが、そのすべてが少し不十分に思えます。

たとえば、考えられるシナリオは次のとおりです。

  • RDP が有効なワークステーション (つまり、リモート ヘルプが有効な XP)
  • RDP が有効になっているサーバー (OS の種類を確認することで、ワークステーションと簡単に区別できます)

しかし、RDP オプションが有効になっているが使用されていないサーバーはどうでしょうか。RDP オプションが有効になっているサーバーで、RDP 経由で誰もログインしていない時間帯に、管理者がコンソールでソフトウェアをインストールしている場合はどうでしょうか? サーバーが実際に使用されているかどうか、RDP に関してかどうかを判断することはできません。

具体的な回答を得る最善の方法は、なぜこれを決定する必要があるのか​​を尋ねることです。これを確実に検出できた場合、どのような機能を有効または無効にしますか?

于 2009-05-26T11:01:46.703 に答える