C# 在.Net Core/UWP中获取环境变量

C# 在.Net Core/UWP中获取环境变量,c#,uwp,.net-core,C#,Uwp,.net Core,我尝试将.NET4桌面应用程序迁移到UWP应用程序,如果没有MSDN之类的文档,这是一项艰巨的任务。我知道我有所有的方法来连接到现有的Webservice,但是使用的方法什么也不返回 var envVars = Environment.GetEnvironmentVariables(); var host = Environment.GetEnvironmentVariable("COMPUTERNAME"); var user = Environment.GetEnvironmentVaria

我尝试将.NET4桌面应用程序迁移到UWP应用程序,如果没有MSDN之类的文档,这是一项艰巨的任务。我知道我有所有的方法来连接到现有的Webservice,但是使用的方法什么也不返回

var envVars = Environment.GetEnvironmentVariables();
var host = Environment.GetEnvironmentVariable("COMPUTERNAME");
var user = Environment.GetEnvironmentVariable("USERNAME");
var userDnsDomain = Environment.GetEnvironmentVariable("USERDNSDOMAIN");
GetEnvironmentVariables的计数为0,来自.Net的旧方法不再存在:

var host = System.Net.Dns.GetHostName();
var user = Environment.UserName;
我需要计算机名、登录用户名和域

有什么诀窍或替代方法吗?

我的解决方案:

var users = await User.FindAllAsync(UserType.LocalUser);
var user = (string) await users.FirstOrDefault().GetPropertyAsync(KnownUserProperties.AccountName);
var domain = "";
var host = "";

if (string.IsNullOrEmpty(user))
{
    var domainWithUser = (string) await users.FirstOrDefault().GetPropertyAsync(KnownUserProperties.DomainName);
    domain = domainWithUser.Split('\\')[0];
    user = domainWithUser.Split('\\')[1];
}

var host = NetworkInformation.GetHostNames().First(x => x.Type == HostNameType.DomainName).DisplayName.Split('.')[0];

这个答案更像是一个警告

  • 您不能在UWP中临时查询环境变量,即使使用PInvoke也不行
  • 您可以查询用户信息,但绝对不能保证
    user
    API将适用于多种用户类型,因此您需要针对空值进行防御性编码我不知道为什么这个API如此不可靠 这是一个示例主页和一个屏幕截图,显示了返回为空白的所有数据

    使用系统;
    使用System.Linq;
    使用Windows.System;
    使用Windows.UI.Xaml.Controls;
    名称空间App_1
    {
    公共密封部分类主页面:第页
    {
    公共主页()
    {
    this.InitializeComponent();
    GetUserInfo();
    }
    公共静态异步void GetUserInfo()
    {
    var users=await User.findalsync(UserType.LocalUser);
    var user=await users.FirstOrDefault().GetPropertyAsync(KnownUserProperties.AccountName);
    var user\u count=users.count;
    var帐户名=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.AccountName);
    变量显示名=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.DisplayName);
    变量域名=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.DomainName);
    变量名=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.FirstName);
    var GuestHost酒店=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.GuestHost);
    变量LastName=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.LastName);
    主名=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.PrincipalName);
    变量提供程序名=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.ProviderName);
    var SessionInitiationProtocolUri=
    等待用户[0]。GetPropertyAsync(KnownUserProperties.SessionInitiationProtocolUri);
    var User_Type=用户[0]。类型;
    }
    }
    }
    

    谢谢@HansPassant的链接。在
    .NET Core
    中(至少在.NETStandard 1.6中实现),系统.NET.NetworkInformation不包含
    GetHostNames()
    。您使用的是什么版本的
    .NET Core