微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# windows 窗体,当我以管理员身份运行时,我无法获取当前用户名

如何解决c# windows 窗体,当我以管理员身份运行时,我无法获取当前用户名

我有一个用 c# 开发的 windows 窗体(安装项目)。由于域内部分用户无权安装该程序,需要右键单击exe,选择以管理员身份运行并安装。为了使计算机重新启动时运行 exe,我将启动文件夹分配如下:

string fileMonitUpService = @"C:\Users\"
    + Environment.GetEnvironmentvariable("USERNAME")
    + @"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\myExe.lnk";

if (!System.IO.File.Exists(fileMonitUpService))
{
    WshShell wshShell = new WshShell();
    IWshRuntimeLibrary.IWshShortcut shortcut;

    string startUpFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup);

    // Create the shortcut
    shortcut = (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(fileMonitUpService);

    shortcut.TargetPath = root + "\\" + "Myexe.exe";
    shortcut.WorkingDirectory = Application.StartupPath;
    shortcut.Description = "MyExe.exe";
    shortcut.Save();
}

问题是当我右键单击并选择使用管理员运行时,它会分配管理员用户的主文件夹。我无法获得打开 Windows 的当前用户名称。另外,我无法使用以下代码进行拍摄:

System.Windows.Forms.Systeminformation.UserName;
System.Security.Principal.WindowsIdentity.GetCurrent().Name;

解决方法

您可以尝试 WMI,看看它是否有效(如果您没有引用它,则有一个适用于它的 Nuget 包)。

string username;

using (var searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem"))
{
    using (var collection = searcher.Get())
    {
        username = collection.Cast<ManagementBaseObject>().First()["UserName"].ToString();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。