代码之家  ›  专栏  ›  技术社区  ›  Oliver Giesen

如何在InnoSetup脚本中检测我是否在终端服务器上安装?

  •  3
  • Oliver Giesen  · 技术社区  · 17 年前

    GetSystemMetrics(SM_REMOTESESSION)

    3 回复  |  直到 17 年前
        1
  •  4
  •   ralphtheninja    17 年前

    Detecting Whether Terminal Services Is Installed

    请注意,除此之外,您还可以使用以下值 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或更高版本的代码

        2
  •  3
  •   Oliver Giesen    17 年前

    感谢Magnus Skog提供的链接,我发现InnoSetup已经支持 GetWindowsVersionEx API函数。因此,我所要做的就是:

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

    • 在启用RDP的XP工作站上本地登录(返回 False )
    • True )
    • 通过RDP远程登录到工作站(返回 错误的 )

    我还没有机会在TS上本地登录时进行测试。我会在有机会的时候更新这篇文章。

        3
  •  1
  •   Lasse V. Karlsen    17 年前

    例如,可能的情况是什么:

    • 工作站,启用RDP(即启用远程帮助的XP)

    但是,启用了RDP选项但未使用的服务器呢?如果服务器启用了RDP选项,但管理员正在控制台安装您的软件,而一天中没有人通过RDP登录,该怎么办?您将无法确定服务器是否实际在使用RDP。

    给你一个具体答案的最好方法是问你为什么需要确定这一点?如果你能够可靠地检测到这一点,你会启用或禁用什么样的功能?

    推荐文章