【问题标题】:Get current user name when starting with UAC以 UAC 启动时获取当前用户名
【发布时间】:2011-07-13 15:24:50
【问题描述】:

我们的设置有一个嵌入式清单,可在应用程序启动之前触发 UAC。 (应用程序以管理员用户身份运行)。但是,如果设置需要安装 .NET Framework,我们必须在重新启动后继续设置。为此,我们必须在当前用户的 RunOnce 中创建一个注册表项。

不幸的是,HKEY_CURRENT_USER 指向管理员的注册表。我们需要找出当前登录并开始安装的用户。 (普通用户点击 setup.exe,管理员在 UAC 提示符中输入了他的详细信息。我们需要找出用户是谁)

我已经尝试了所有常用方法(Environment.UserName、WindowsIdentity.GetCurrent())

谢谢!

【问题讨论】:

  • 安装程序在需要实际进行修改之前不应触发 UAC。那里会解决你的问题。

标签: c# .net wmi


【解决方案1】:

您可以使用LsaEnumerateLogonSessions 函数来检索您需要的内容。但是,它是一个 winapi C 函数调用。如果您需要它的托管版本,我相信您可以查看source code for Cassia,它在其终端服务 API 中使用了此功能。调用应该是一样的。也可以看here

您也可以使用NetWkstaUserEnum WINAPI 函数。你可以为它找到一个托管包装器here

使用 Cassia 库,此代码可以正常工作:

ITerminalServicesManager manager = new TerminalServicesManager();
ITerminalServicesSession session = manager.CurrentSession;

string userInfo = session.DomainName + "\\" + session.UserName;
NTAccount account = session.UserAccount;

【讨论】:

    【解决方案2】:

    将您的初始 setup.exe 作为一个小型可执行文件运行,该可执行文件会在将您的实际安装程序作为子进程调用时显示启动画面。小EXE不以管理员身份运行,可以将登录的用户名传递给子进程。子进程调用 UAC 并在管理上下文中运行,但已将登录的用户名作为命令行参数。

    【讨论】:

      【解决方案3】:

      如果您的应用程序以管理员身份运行,则无法检索原始用户:

      如果用户通过右键单击其 EXE 文件并选择 “以管理员身份运行”,那么不幸的是,这个标志将没有 效果,因为安装程序没有机会使用 原始用户凭据。如果安装程序从 一个已经提升的过程。但是请注意,这不是 Inno 设置特定的限制;基于 Windows Installer 的安装程序不能 在这种情况下返回原始用户凭据。

      来源:InnoSetup Help

      正如 Matthew 在 cmets 中所说,您不应以管理员身份运行应用程序,而应仅在代码中需要时触发 UAC。

      【讨论】:

        【解决方案4】:

        这会通过去除域返回登录的 Windows 用户的名称:

        using System.Security.Principal;  // here is the security namespace you need
        
        ...
        
        string userName = WindowsIdentity.GetCurrent().Name.Replace("\\", "|");
        string[] split = userName.Split(new Char[] { '|' });
        lblDebug.Text = (split.Count() > 1) ? split[1] : userName;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-21
          相关资源
          最近更新 更多