Я редактирую решение c # WinForm и не понимаю код, который получает имя учетной записи пользователя. Код показан ниже.
Приложение отображает настраиваемую форму для каждой учетной записи пользователя, а имя учетной записи пользователя необходимо для получения значений конфигурации для конкретного пользователя из базы данных SQL.
Что, насколько я могу судить, произойдет, если вернутое имя пользователя будет правильным для первой учетной записи, к которой был осуществлен доступ, но после переключения на другую учетную запись пользователя возвращенное имя учетной записи не обновляется, а первоначальное имя учетной записи пользователя продолжает возвращаться.
#region "Function to retrieve LoggedIn user"
/// <summary>
/// "Function to retrieve LoggedIn user"
/// </summary>
/// <returns></returns>
private string GetLoggedInUserName()
{
ManagementClass objManClass = new ManagementClass("Win32_Process");
ManagementObjectCollection arrManObjects = objManClass.GetInstances();
foreach (ManagementObject objMan in arrManObjects)
{
if (objMan["Name"].ToString().Trim().ToLower() == "explorer.exe")
{
string[] arrArgs = { "", "" };
try
{
objMan.InvokeMethod("GetOwner", arrArgs);
sUserName = arrArgs[0];
break;
}
catch (Exception lExp)
{
BusinessObject.Logger.Logger.Log(lExp);
}
}
}
return sUserName;
}
#endregion
Это приложение должно работать на XP, Vista и 7.
Мой инстинкт - просто использовать что-то вроде ...
string sUserName = Environment.UserName;
... но мои знания об ОС Windows скудны, и люди, написавшие оригинальный код, намного умнее меня.
Итак, два моих вопроса:
(1) Почему этот код не обновляется до нового имени пользователя, когда я меняю учетные записи пользователей?
(2) зачем использовать метод explore.exe вместо простого «Environment.UserName»?
Кроме того, два проекта в моем решении имеют метод GetLoggedInUserName (). Один проект выполняется в фоновом режиме с таймером, который вызывает другой проект, и этот проект создает настраиваемую пользователем форму.
У меня есть еще один связанный вопрос о том, почему форма не отображается для всех учетных записей пользователей, кроме учетной записи администратора, которую я опубликую как отдельный вопрос, как только выясню этот вопрос.