【发布时间】:2016-11-25 13:48:13
【问题描述】:
我用 C# 制作了一个系统托盘应用程序,它只是在后台运行。它使用 Exchange WebServices 侦听邮件服务器,并在邮件帐户每次收到邮件时执行一组操作。它正在使用许多 Excel 应用程序,如果我将程序转换为服务,则无法正常工作(这就是为什么它必须是系统试用应用程序的原因)。
程序不能一次运行多次,这一点很重要。我添加了一个互斥锁,所以我不能在同一个会话中多次运行该程序。但是问题是,当我登录到 Windows Server 上的另一个会话(每个用户可以有两个会话)时,该程序在系统托盘中不可见,我可以再次打开它,因此它运行两次,每次运行一次会议。如何防止这种情况发生?
谢谢
【问题讨论】:
-
创建一个具有保留名称的文件,例如
C:\temp并保持锁定状态,以便实例 #2 注意到并退出? -
互斥体的名称是什么?如果互斥锁名称以 Global\ 开头,则它对所有终端服务会话都是全局的。您还应该检查互斥锁权限,以便所有用户都可以访问它。
-
为什么不能支持每个用户会话的单个托盘应用程序?不同的用户会话应该有自己的托盘应用程序。
标签: c# session windows-server-2012 system-tray