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