相关疑难解决方法(0)

如何从.NET中的Windows服务获取当前登录的用户名?

我有一个需要当前登录用户名的Windows服务.我试过System.Environment.UserName,Windows身份和Windows窗体身份验证,但所有都返回" 系统 "作为用户,因为我的服务在系统特权运行.有没有办法在不更改我的服务帐户类型的情况下获取当前登录的用户名?

c# windows-services visual-studio-2010

59
推荐指数
4
解决办法
13万
查看次数

Windows服务:用户登录时获取用户名

我的Windows服务应该保存当前登录/注销的用户名。以下代码适用于我,但没有保存用户名:

protected override void OnSessionChange(SessionChangeDescription changeDescription)
    {
        try
        {
            string user = "";

            foreach (ManagementObject currentObject in _wmiComputerSystem.GetInstances())
            {
                user += currentObject.Properties["UserName"].Value.ToString().Trim();
            }

            switch (changeDescription.Reason)
            {
                case SessionChangeReason.SessionLogon:
                    WriteLog(Constants.LogType.CONTINUE, "Logon - Program continues: " + user);
                    OnContinue();
                    break;
                case SessionChangeReason.SessionLogoff:
                    WriteLog(Constants.LogType.PAUSE, "Logoff - Program is paused: " + user);
                    OnPause();
                    break;
            }
            base.OnSessionChange(changeDescription);
        }
        catch (Exception exp)
        {
            WriteLog(Constants.LogType.ERROR, "Error");
        }
    }
Run Code Online (Sandbox Code Playgroud)

编辑: foreach 循环给我一个错误:

消息:访问被拒绝。(HRESULT 异常:0x80070005 (E_ACCESSDENIED))类型:System.UnauthorizedAccessException

但在我看来,这段代码不是解决方案,因为它保存了登录到服务器的所有用户。

c# windows service visual-studio-2010

1
推荐指数
1
解决办法
4032
查看次数