0

我的 WinForm 应用程序必须根据登录的用户打开特定的表单。在登录表单中,用户身份验证完成,用户提供用户名-密码。有效凭据位于 .csv 文件中。如果用户是有效的,登录表单被隐藏并出现 Form2。

我想要做的是阻止打开应用程序(登录表单)并与已经运行此应用程序的人提供相同的用户名密码的用户。我当前的解决方案是向每个进程(实例)添加一个具有登录用户名的环境变量,如下所示:

Process proc = System.Diagnostics.Process.GetCurrentProcess();
proc.StartInfo.EnvironmentVariables.Add("G2GUser",username);

当另一个实例打开时,检查尝试登录的用户是否已经在使用该应用程序。因此,正在检查此变量:

List<Process> processes =     System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).ToList();
foreach (Process proc in processes)
{
   StringDictionary sd = proc.StartInfo.EnvironmentVariables;
   if (!String.IsNullOrEmpty(sd["G2GUser"]))
      if (sd["G2GUser"] == username) {; //block this user}
}

问题是我可以看到进程列表,但未存储 EnvironmentVariables。你能为这种方法提出另一种方法吗?

4

1 回答 1

1

我不建议使用环境变量。

鉴于您可以拥有任意数量的应用程序实例,您需要维护某种形式的跟踪这些用户。

您可以通过使用进程间通信在应用程序之间进行通信,例如Named pipesExample named pipe IPC with read/write timeout

然后通过在实例之间来回通信,您可以在它们之间做出决定。

于 2013-04-05T14:00:47.690 回答