gpt4 book ai didi

c# - 如何仅终止本地计​​算机的远程桌面 session

转载 作者:行者123 更新时间:2023-12-04 13:41:41 24 4
gpt4 key购买 nike

我正在使用以下代码来终止远程桌面 session 和在其中运行的应用程序。它工作正常,唯一的问题是它会杀死所有用户的指定应用程序。

我如何将它保留在运行 session 的本地机器上?

我们有多个用户从他们本地机器上的服务器登录并运行这个应用程序。大多数使用工作资源运行,但有些使用远程桌面。

无论我运行我的代码时他们如何登录,所有用户都失去了他们的 session 。

private void btnCloseSession_Click(object sender, EventArgs e)
{
if (!runningExclusiveProcess)
{
runningExclusiveProcess = true;
btnCloseSession.Enabled = false;
//check and close Labware if running
if (chkCloseLabware.Checked == true)
{
if (chkExit.Checked == true)
{
KillLabWare();
Close();
}
else
{
KillLabWare();
}
}

Process[] my = Process.GetProcessesByName("mstsc");

//loop thru list to get selected item(s)
ListBox.SelectedObjectCollection selectedItems = new ListBox.SelectedObjectCollection(lstOpenSessions);
selectedItems = lstOpenSessions.SelectedItems;

try
{
//remove credentials
string szTestx = "/delete:GOJO.NET/" + cboServer.Text;
ProcessStartInfo infox = new ProcessStartInfo("cmdkey.exe", szTestx);
Process procx = new Process();
procx.StartInfo = infox;
procx.Start();

if (lstOpenSessions.SelectedIndex != -1)
{
for (int i = selectedItems.Count - 1; i >= 0; i--)
{
//loop thru process to match process vs. list selection(s)
foreach (Process remote in my)
{
if (remote.MainWindowTitle == selectedItems[i].ToString())
{
KillRS(remote.MainWindowTitle);
lstOpenSessions.Items.Remove(selectedItems[i]);
}
}

if (lstOpenSessions.Items.Contains(selectedItems[i].ToString()))
{
lstOpenSessions.Items.Remove(selectedItems[i]);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
}
// If your task is synchronous, then undo your flag here:
runningExclusiveProcess = false;
btnCloseSession.Enabled = true;
}
}
public void KillLabWare()
{
ConnectionOptions con = new ConnectionOptions();
con.Username = cboUserName.Text;
con.Password = txtPassWord.Text;
string strIPAddress = cboServer.Text;

ManagementScope scope = new
ManagementScope(@"\\" + strIPAddress + @"\root\cimv2", con);
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Process WHERE Name='Labware.exe'");
ManagementObjectSearcher searcher = new
ManagementObjectSearcher(scope, query);
ManagementObjectCollection objectCollection = searcher.Get();
foreach (ManagementObject managementObject in objectCollection)
{
managementObject.InvokeMethod("Terminate", null);
}
}
private void KillRS(string rwt)
{
foreach (Process p in Process.GetProcesses())
{
if (p.MainWindowTitle == rwt)
{
p.Kill();
}
}
}
public static void KillRemoteProcess(Process p, string user, string password)
{
new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "TaskKill.exe",
Arguments = string.Format("/pid {0} /s {1} /u {2} /p {3}", p.Id, p.MachineName, user, password),
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
}
}.Start();
}

最佳答案

听起来您试图强制特定用户注销?这是因为您发现用户忘记注销并不断消耗许可证吗?
LabWare 应用程序允许为每个用户设置超时间隔(以分钟为单位),间隔过后,用户将被注销(不再消耗许可证)。
如需更多信息,请参见 LabWare 7 技术手册的第 204 页。
或者,如果这是用于调度程序(服务或集群实例) session ,这也可以由应用程序控制。您可以手动更改服务表上实例记录上的关闭和保持事件标志(如果使用服务管理器),或者您可以编写 LIMS 基本事件触发器/自动化脚本或计划子例程(或将其作为可视化工具上的按钮)工作流)来为你做这件事。
哈。

关于c# - 如何仅终止本地计​​算机的远程桌面 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56166330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com