私の 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 が保存されていません。このアプローチの別の方法を提案できますか?