日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core 如何判断程序是否在远程桌面(RDP)下运行

發布時間:2023/12/4 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core 如何判断程序是否在远程桌面(RDP)下运行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍字關注“汪宇杰博客”

導語

由于疫情的關系,很久沒發文章了。今天終于穩定下來在家辦公,抽空分享一個剛學會的技巧。最近在家辦公的程序員可能避免不了要用遠程桌面,那么問題來了,你的 .NET Core 程序有沒有辦法知道自己是否在 Windows 遠程桌面環境下運行呢?

Windows Forms

如果你用的是 .NET Core 3.x 版本,并開發的是 Windows Forms 應用,那么恭喜你,.NET 自帶了一個簡單粗暴的方法。

SystemInformation.TerminalServerSession 即可返回當前會話是否在遠程桌面下。

public partial class Form1 : Form

{

? ? public Form1()

? ? {

? ? ? ? InitializeComponent();

? ? ? ? if (IsRemoteSession)

? ? ? ? {

? ? ? ? ? ? MessageBox.Show("Under RDP");

? ? ? ? }

? ? }

? ? public static Boolean IsRemoteSession => SystemInformation.TerminalServerSession;

}

運行效果

去你的 WinForms?

Bing 不是人人都喜歡 WinForms,畢竟它代表落后、不思進取的拖控件程序員(即使他們下班時候天還亮著)。那么其他類型的 .NET Core 程序如何判斷自己是否在 RDP 下運行呢?我們需要 P/Invoke 騷操作。

.NET Core 使用 P/Invoke 的姿勢和 .NET Framework 幾乎一致。只要一個 [DllImport] 標記即可。

根據田牌文檔描述,Windows 本身就帶有一個 Win32 API可以返回當前會話是否為遠程桌面。即 User32.dll 上的?GetSystemMetrics( SM_REMOTESESSION ); 方法

文檔傳送門:https://docs.microsoft.com/en-us/windows/win32/termserv/detecting-the-terminal-services-environment?

其中的?SM_REMOTESESSION 其實是個預定義的 int 值,在 C# 中可表示為 0x1000。使用 P/Invoke 判斷一個 Console 程序是否運行在 RDP 下的代碼如下:

static void Main(string[] args)

{

? ? bool isRDP = GetSystemMetrics(SM_REMOTESESSION);

? ? Console.WriteLine($"Running under RDP: {isRDP}");

? ? Console.ReadKey();

}

const int SM_REMOTESESSION = 0x1000;

[DllImport("user32")]

static extern bool GetSystemMetrics(int index);

其中 user32 后面的 .dll 可以省略。.NET Core 在 Windows 上會自動去找 dll,在 Linux 上會去找 so (即使 Linux Bing 沒有 RDP 這個東西也沒有 user32 這個庫)

運行效果

不過這種技巧大家平時正常寫代碼的時候一定要盡量避免,在 .NET 的托管環境下調用非托管代碼不僅會導致程序和平臺及系統版本耦合,還易爆,爆完還難以抓異常信息。有關 P/Invoke 的詳細介紹,請參考微軟文檔:https://docs.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke

總結

以上是生活随笔為你收集整理的.NET Core 如何判断程序是否在远程桌面(RDP)下运行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。