检测 kiosk 应用程序启动的 Citrix 会话的终止

2023-12-01

我正在开发一个信息亭应用程序,它为用户提供了 Citrix 连接的选择。

其想法是,用户选择 kiosk 应用程序提供的连接,然后 kiosk 启动程序通过运行类似于以下内容的命令来启动所选连接:

C:\Program Files\Citrix\ICA Client\wfica32.exe \\server\path\to\icaFile.ica

我希望用户留在 Citrix 会话中 - 不是出于任何安全原因,只是为了让用户在访问所选会话并最终注销时获得良好的体验。因此,我启动了一个全屏会话,一切都很好,直到用户注销。

当用户注销 Citrix 会话时,我还想在客户端计算机上启动注销。我尝试使用类似于以下的代码以明显的方式执行此操作:

Process citrixProcess = new Process();
citrixProcess.StartInfo = new ProcessStartInfo();
citrixProcess.StartInfo.FileName = "C:\Program Files\Citrix\ICA Client\wfica32.exe";
citrixProcess.StartInfo.Arguments = "\\server\path\to\icaFile.ica";
citrixProcess.Start();
citrixProcess.WaitForExit();
//
// Followed by code to initiate logoff from the local computer
//

但代码并没有等待 Process 对象,而是直接继续到启动注销的下一部分。结果是 Citrix 会话几乎立即终止,因为本地计算机注销立即发生。我最好的猜测是,wfica32.exe 的初始启动在启动新进程来实际处理会话后立即退出。但是,如果发生这种情况,则不清楚如何处理,因为启动 Citrix 会话后 wfica32.exe 似乎仍在运行。

我正在寻找一种可靠的方法来检测以这种方式启动的 Citrix 会话何时终止。


在 C# 应用程序中,您可以引用 WFICALib.dll(在 Citrix Ica Client 文件夹中),创建 ICAClientClass 对象,订阅并调用其 Disconnect 事件,然后调用 LoadIcaFile 方法来启动连接。

在 Disconnect 方法的处理程序中,您需要添加代码来启动注销并终止当前应用程序。

一个示例实现:

public static void Connect()
{
    // Configure the connection.
    ICAClientClass ica = new ICAClientClass();
    ica.Application = string.Empty;
    ica.InitialProgram = "#Name of Citrix application to launch";
    ica.Launch = true;
    ica.Domain = Environment.UserDomainName;
    ica.DesiredColor = ICAColorDepth.Color24Bit;
    ica.OutputMode = OutputMode.OutputModeNormal;
    ica.MaximizeWindow();
    ica.ClientAudio = true;
    ica.AudioBandwidthLimit = ICASoundQuality.SoundQualityMedium;
    ica.Compress = true;
    ica.ScreenPercent = 100;
    ica.TransportDriver = "TCP/IP";
    ica.WinstationDriver = "ICA 3.0";
    ica.SSLEnable = false;
    ica.SSLCiphers = "ALL";
    ica.SSLProxyHost = "*:443";
    ica.EncryptionLevelSession = "EncRC5-128";

    // Citrix server name or IP
    ica.Address = "x.x.x.x"; 

    // Setup handler for disconnect event.
    ica.OnDisconnect += ica_OnDisconnect;

    // Initiate the connection.
    ica.Connect();
}

private static void ica_OnDisconnect()
{
    Console.WriteLine("ica_OnDisconnect");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测 kiosk 应用程序启动的 Citrix 会话的终止 的相关文章

  • C#中如何检测字符串是否为货币

    通常当我需要转换时currency string 如 1200 55 z 或 1 249 到十进制值我这样做 if currencyString Contains z decimal value Decimal Parse dataToCh
  • 实体框架代码优先 - 在另一个文件中配置

    使用 Fluent API 将表到实体的映射分开的最佳方法是什么 以便它全部位于单独的类中 而不是内联在 OnModelCreating 方法中 我目前在做什么 public class FooContext DbContext prote
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • Linq Where 本地计数器关闭在 VS watch 中的结果不同

    我尝试删除前 3 个元素array与 LinQWhere扩展功能 这是一个例子 var array new 1 2 3 4 5 6 7 8 9 var count 3 var deletedTest1 0 var test1 array W
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • 在可观察项目生成时对其进行处理

    我有一个IObservable它会生成一次性物品 并且在其生命周期内可能会生成无限数量的物品 因此 我想在每次生成新项目时处理最后一个项目 因此Using http reactivex io documentation operators
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 便携式终端

    有没有办法根据所使用的操作系统自动使用正确的 EOL 字符 我在想类似的事情std eol 我知道使用预处理器指令非常容易 但很好奇它是否已经可用 我感兴趣的是 我的应用程序中通常有一些消息 稍后我会将这些消息组合成一个字符串 并且我希望将
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再
  • 最后从同一类中的其他构造函数调用构造函数

    我在这里读到可以调用另一个构造函数从同一类中的另一个构造函数调用构造函数 https stackoverflow com questions 829870 calling constructor from other constructor

随机推荐

  • 当设备重新启动并强制关闭应用程序时,Redmi 和其他自定义中文 ROM 中未收到 WorkManager doWork 回调

    当应用程序处于后台或因滑动而被终止时 我的应用程序在 Redmi 手机中未收到推送通知 所以我尝试通过 WorkManager 唤醒手机 它适用于除 Redmi 和其他中国定制 ROM 手机之外的许多手机 这是我的 Worker 类代码 p
  • Bash 脚本错误:[i:找不到命令

    该程序应该接受用户的一个数字并打印那么多素数 由于某种原因该程序无法运行 我是 bash 脚本新手 这是我的第一个程序 在我看来 一切似乎都是正确的 请告诉我哪里错了 echo Enter num read n i 2 j 2 for i
  • 声明可变长度数组[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的可变长度数组 我正在尝试形成一个数组 其大小由用户输入的另一个变量控制 我是 C 编码的初学者 我使用的是 Visual Studio 2008 专业编译器 这是编译器显示错误的代码 doub
  • DocuSign:Rest API C# 为签名者获取永久链接

    我正在使用 DocuSign 的 REST API 以嵌入式签名模式创建信封 使用 CreateRecipientView 函数我只得到一个临时链接 但我更希望获得像通知邮件中那样的永久链接 我怎样才能得到这个链接 URL 使用 DocuS
  • 如何为旧的 AMP 页面制定 301 重定向规则?

    我的网站使用旧的 AMP 插件 其中添加了 amp 在每个帖子 页面 URL 之后 以我家为例 https example com而 amp 是https example com amp 我想知道我可以在其中添加什么规则 htaccess文
  • JavaFX 控制器注入不起作用

    我有两个fxml文件 我将它们与include陈述 主要的 fxml文件看起来像这样
  • 如何在 VS Code 上获得 WebdriverIO 自动完成功能

    有没有办法让 VS Code 的 webdriverio 自动完成功能 其他代码编辑器 例如 Intellij 提供类似设置 gt 首选项 gt 语言和框架 gt JavaScript gt 库的功能 从那里我们可以使用 webdriver
  • UDP 数据接收时的 Python 套接字错误。 (10054)

    我目前在使用 UDP 和 Python 套接字模块时遇到问题 我们有服务器和客户端 当我们向用户发送数据时就会出现问题 用户可能通过客户端崩溃 ISP 断开连接或其他不正确的方法关闭了与服务器的连接 因此 可以将数据发送到关闭的套接字 当然
  • 在 volley StringRequest 上禁用 Javascript

    我的 MainActivity 中有一个像这样的齐射 StringRequest StringRequest strReq new StringRequest Method POST G serverLevelAdress new List
  • canvas.toDataUrl 返回“数据:;”当canvas.width/height太大时

    我需要做一个 svg 导出 png 图像功能 首先 我生成 svg 到 base64 也使用 base64 标头类型svg xml then var image new Image image src base64Code image on
  • 如何在 Laravel PHP 中从文本创建图像而不需要任何外部库

    我正在使用此代码从文本在 Core PHP 中创建图像 header Content type image png text email protected string text font 3 width ImageFontWidth f
  • Ember.js:使用 @each 观察数组属性不起作用

    我的理解是 观察 each 意味着我正在观察数组中任何属性的任何更改 但它似乎不起作用 例如 App ArrayProxy Ember ArrayProxy extend i 0 foo function console log foo c
  • 通过css重新排列div

    我有三个 3 子 div 分别具有类 span2 span7 和 span3 当我的浏览器宽度低于 763px 时 我希望它按照 span2 span3 和 span7 的顺序排列 我将如何通过CSS做到这一点 这是我的初始代码 div c
  • 在启动期间从读取文件加载数据,然后处理新文件并从映射中清除旧状态

    我正在开发一个项目 在启动过程中 我需要读取某些文件并将其存储在地图的内存中 然后定期查找新文件 如果有 然后用此替换启动期间地图中内存中的所有文件新数据 基本上每次如果有一个新文件full state然后我想将内存中的映射对象刷新到这个新
  • PLSQL动态查询

    我有一个表 A 其中有列A它将表名作为值 所有这些表都有一个公共列C 我需要每个表的该列的最大值 我尝试使用动态 SQL 但出现错误 请建议 DECLARE query1 VARCHAR2 100 c table VARCHAR2 40 c
  • CSS 圆形边框填充动画

    我有一个 css 文件 它可以完美地制作圆形边框填充动画 其宽度和高度均为 100 像素 但我只需要在 50px 宽度和高度的圆圈中使用相同的动画 我尝试了很多次来最小化尺寸 但圆圈没有通过动画正确修复 请帮我缩小这个圈子 我的需求 宽度
  • 当我使用任务管理器终止程序时收到什么消息

    所以我有一个 C dll 在我的 C 应用程序中使用它来监视 Windows 消息 我想知道 WM CLOSE 和 WM QUERYENDSESSION 是否已发送 因为我无法从 C 应用程序中看到它们 如果我收到这些消息之一 我想对我的文
  • 如何在microsoft azure上的django项目中配置celery-redis?

    我在 azure 中部署了这个 django 定位器项目 我的 Redis 缓存主机名 DNS 是 mycompany azure microsoft net 我在 azure 中创建了它 但不确定在哪里可以找到 redis 服务器的密码
  • 无法在 PowerShell 中获取事件数据字段数据

    我正在尝试将事件 4625 中的特定数据字段 FailureReason 获取到 CSV 字段 我用以下代码分析了事件模式 Get WinEvent ListProvider Microsoft Windows Security Audit
  • 检测 kiosk 应用程序启动的 Citrix 会话的终止

    我正在开发一个信息亭应用程序 它为用户提供了 Citrix 连接的选择 其想法是 用户选择 kiosk 应用程序提供的连接 然后 kiosk 启动程序通过运行类似于以下内容的命令来启动所选连接 C Program Files Citrix