公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

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

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

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

導(dǎo)語(yǔ)

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

Windows Forms

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

SystemInformation.TerminalServerSession 即可返回當(dāng)前會(huì)話是否在遠(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 的姿勢(shì)和 .NET Framework 幾乎一致。只要一個(gè) [DllImport] 標(biāo)記即可。

根據(jù)田牌文檔描述,Windows 本身就帶有一個(gè) Win32 API可以返回當(dāng)前會(huì)話是否為遠(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 上會(huì)自動(dòng)去找 dll,在 Linux 上會(huì)去找 so (即使 Linux Bing 沒有 RDP 這個(gè)東西也沒有 user32 這個(gè)庫(kù))

運(yùn)行效果

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

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


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

主站蜘蛛池模板: 97人妻在线公开视频 | 18禁成年无码免费网站无遮 | 精品啪啪一区二区 | 国产成人a在线观看视频免费 | 国产一区在线观看无码av | 精品久久久久久无码专区不久久 | 成人欧美一区二区三 | 国产一区二区三区不卡精品 | 东京热久久精品 | 爆乳高潮喷水无码正在播放 | 国产女人天天弄高清免 | 精品国产av色一区二区深夜久久 | 国产精品成人免费福利 | 国产自国产自愉自愉免费24区 | 国产后式a一视频 | 精品日韩人伦一区二区三区蜜桃 | 精品无码视频在线观看专区 | av片免费大全在线观看不卡 | a级毛片一区二区免费视频 a级毛片在线播放 | 国产精品白浆在线观看免费 | 国产成成视频在线观看 | 91国内精品久久久久怡红院 | 91日本在线中文字幕 | 国产精品v户外野战 | 国产中文字幕在线点播 | 国产欧美日韩另类 | 精品秘无码一区二区三区 | 国产精品福利在线观看免费不卡 | 99久久精品国产精品亚洲 | 国产一区二区美女自 | 国产欧洲黄色一级片视频 | 国产人妖ts在线视频网 | 99亚洲精品一区二区三区 | 国产精品免费人成网站 | 国产成人无码精品久久小说 | 国产一区亚洲二区三区 | 国产精品亚洲一区二区无码 | 国产精品一级aa片 | 国产女主播在线观看 | 国产毛多水多高潮高清 | 国产精品福利短视在线播放频 |