無論如何,在程序中,檢測程序是否從遠程桌面會話內運行,或者程序是否在.NET 2.0中運行正常?我想要做的是,我創建了一個時鐘應用程序,它可以記錄一個人的進出時間並跟蹤記錄。但我懷疑,這個特定的人正在遠程工作,離開家,進出計算機。檢測遠程桌面連接
任何想法如何解決這個問題(並帶走遠程桌面訪問不是一種選擇)?我的想法是,如果有辦法檢測遠程桌面會話,我將簡單地將其實施到程序中,並防止它們遠程計時。
無論如何,在程序中,檢測程序是否從遠程桌面會話內運行,或者程序是否在.NET 2.0中運行正常?我想要做的是,我創建了一個時鐘應用程序,它可以記錄一個人的進出時間並跟蹤記錄。但我懷疑,這個特定的人正在遠程工作,離開家,進出計算機。檢測遠程桌面連接
任何想法如何解決這個問題(並帶走遠程桌面訪問不是一種選擇)?我的想法是,如果有辦法檢測遠程桌面會話,我將簡單地將其實施到程序中,並防止它們遠程計時。
http://www.appdeploy.com/messageboards/tm.asp?m=21420&mpage=1&key=厬
系統變量%SESSIONNAME%將返回控制檯如果本地或RDP *如果遙控器。
isRDP = [System.Environment]
.GetEnvironmentVariable("SESSIONNAME").StartsWith("RDP-")
如果您使用RDP /控制檯開關(或/管理,根據不同的型號),則返回「控制檯」(我剛剛檢查;-p) – 2009-06-10 07:29:33
System.Environment..GetEnvironmentVariable(「SESSIONNAME」)。StartsWith ( 「RDP-」);爲我工作。 – RaoulRubin 2012-04-13 13:31:25
它在RDP上爲我返回控制檯。 – 2013-07-30 11:45:24
據稱,
System.Windows.Forms.SystemInformation.TerminalServerSession
將是一個遠程桌面會話真(或VNC會話)
,但我會測試它,以確保;-)
如果你關心的是VNC,看起來可以用netstat
來檢查開放的TCP連接。在命令提示,輸入:
netstat -n -a -p tcp
,並檢查,以查看是否該端口5900被「已建立」。當然,5900是默認的連接端口,所以它將取決於設置的端口。
從那裏,我發現this post at CodeGuru說明如何在C#程序中使用netstat
:
string sCommand = "netstat";
string sArgs = "";
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo (sCommand, sArgs);
psi.UseShellExecute = false;
psi.RedirectStandartOutput = true;
System.Diagnostics.Process proc = null;
proc = System.Diagnostics.Process.Start(psi);
proc.WaitForExit();
// Read the first 4 lines. They don't contain any information we need to get
for (int i = 0; i < 4; i++)
proc.StandardOutput.ReadLine();
while (true)
{
string strLine = proc.StandardOutput.ReadLine();
if (strLine == null)
break;
// Analyze the line
// Line is in following structure:
// Protocol (TCP/UDP) Local Address(host:port) Foreign Address(host:port) State(ESTABLISHED, ...)
}
如果你不想添加一個引用System.Windows.Forms.dll中只爲這(如上面所建議的),則還可以直接通過的PInvoke調用基礎系統調用,例如:
int result = GetSystemMetrics(SystemMetric.SM_REMOTESESSION);
bool isRemoteSession = (result != 0);
的SystemMetric枚舉可以在PInvoke.net - SystemMetric找到(但是可以只使用的0x1000的值);而GetSystemMetrics的簽名位於PInvoke.net - GetSystemMetrics。
我測試了這個與RDP和VNC - 與前者(管理員/控制檯模式也),沒有檢測到後者。
所有遠程登錄程序都需要在本地機器上運行的服務或程序。如果這些服務或程序被允許在他的本地機器上運行,提問者只需要擔心VNC及其克隆。它們不是遠程桌面使用所必需的,並且所有操作系統都有遠程桌面客戶端。如果遠程桌面正在運行,則不需要VNC服務器。
此外,除非您以服務器計算機上的管理員身份安裝VNC克隆,否則VNC克隆無法爲您登錄。只要您不讓用戶像其他用戶一樣運行流程,唯一的問題是您的其他員工之一是否以有問題的身份登錄。如果是這樣的話,沒有技術解決方案就足夠了。即使您爲每位必須用於登錄的員工製作了個人卡片,有問題的員工也可以給他的朋友發送卡片。
好吧,前幾天我有類似的問題。我所做的,解決它了的事實,即一些遠程桌面應用使用已知默認端口,至少VNC和/或微軟遠程桌面連接。因此,我創建如果正在使用的端口,它告訴的方法,具體如下:
/* Libraries needed */
using System.Linq;
using System.Net.NetworkInformation;
/*....
....
....*/
private static bool IsPortBeingUsed(int port)
{
return IPGlobalProperties.GetIPGlobalProperties().
GetActiveTcpConnections().
Any(
tcpConnectionInformation =>
tcpConnectionInformation.LocalEndPoint.Port == port
);
}
記得把using語句與圖書館的文件,其中該方法的開始。
你只需要通過例如參數如3389端口這是遠程桌面連接,或5900端口這是VNC連接默認端口的默認端口。
該方法是用C#4.0創建的功能,但它可以完美地與舊版本的C#.Net或Visual Basic一起完成。
這對我有效,因爲我只需要檢查我之前提到的兩個應用程序。
我希望它能提供幫助。
對於Windows應用商店的應用程序,你可以使用這個:
Windows.System.RemoteDesktop.InteractiveSession.IsRemote
哈哈,這是一個有趣的問題:) – willem 2009-06-10 05:32:53
這裏的一個問題將是不同的遠程工具的範圍 - MSTSC和VNC會大競爭者,但PCAnywhere,Live Mesh,GoToMyPC等等,更不用說Live Meeting和Adobe Connect Pro等可以同時進行桌面遠程處理的東西。要做得更好,這可能非常困難。 – 2009-06-10 07:35:27