欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

【C#】.NET Core 如何判斷程序是否在遠(yuǎn)程桌面(RDP)下運(yùn)行

admin
2021年3月16日 0:20 本文熱度 3694

導(dǎo)語

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

Windows Forms

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

SystemInformation.TerminalServerSession 即可返回當(dāng)前會話是否在遠(yuǎn)程桌面下。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        if (IsRemoteSession)
        {
            MessageBox.Show("Under RDP");
        }
    }
    public static Boolean IsRemoteSession => SystemInformation.TerminalServerSession;
}

運(yùn)行效果

去你的 WinForms?

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

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

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

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

其中的 SM_REMOTESESSION 其實(shí)是個(gè)預(yù)定義的 int 值,在 C# 中可表示為 0x1000。使用 P/Invoke 判斷一個(gè) Console 程序是否運(yùn)行在 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 上會自動(dòng)去找 dll,在 Linux 上會去找 so (即使 Linux Bing 沒有 RDP 這個(gè)東西也沒有 user32 這個(gè)庫)

運(yùn)行效果

不過這種技巧大家平時(shí)正常寫代碼的時(shí)候一定要盡量避免,在 .NET 的托管環(huán)境下調(diào)用非托管代碼不僅會導(dǎo)致程序和平臺及系統(tǒng)版本耦合,還易爆,爆完還難以抓異常信息。有關(guān) P/Invoke 的詳細(xì)介紹,請參考微軟文檔:

https://docs.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke


該文章在 2021/3/16 0:20:42 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved