我的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