我的WinForm应用程序必须根据登录的用户打开特定表单。在登录表单中,用户认证完成,用户提供用户名密码。有效凭据位于.csv文件中。如果用户有效,登录表单将被隐藏并显示Form2。阻止用户打开表单,如果其他实例有此用户
我想要做的是阻止打开应用程序(登录表单)的用户,并为已经运行此应用程序的用户提供相同的用户名 - 密码。 我目前的解决办法是添加到每个流程(例如)环境变量与登录的用户名是这样的:
Process proc = System.Diagnostics.Process.GetCurrentProcess();
proc.StartInfo.EnvironmentVariables.Add("G2GUser",username);
,用另一个实例打开时,checkes如果谁试图登录已经是用户使用应用。因此,此变量正在检查:
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不存储。你能否为这种方法提出另一种方法?
你想阻止更多的用户在同一台机器或不同的机器(局域网)?或者你想简单地阻止在同一台计算机上重新打开相同的应用程序? – Steve 2013-04-05 13:57:07
如果你想阻止用户打开另一个应用程序的'Instance',那么你将需要创建一个'Mutex' – MethodMan 2013-04-05 13:58:53
@DJKRAZE互斥量对于限制多个实例非常有用,但是看起来他想限制一些如果另一个实例正在用登录到应用程序的相同用户运行,则应用内行为;毫无疑问,他希望这样做可以限制对某些州的共享访问或防止同时进行修改。 – Clint 2013-04-05 14:10:50