【问题标题】:Get environment variables in .Net Core / UWP在 .Net Core / UWP 中获取环境变量
【发布时间】:2016-02-17 15:30:21
【问题描述】:

我尝试将我们的 .Net 4 桌面应用程序迁移到 UWP 应用程序,如果没有像 MSDN 这样的文档,这是一项艰巨的任务。知道我有所有方法可以连接到现有的 Web 服务,但是使用的方法没有返回任何内容。

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;

我需要计算机名称、登录用户名和域。

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

【问题讨论】:

标签: c# uwp .net-core


【解决方案1】:

我的解决方案:

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];

【讨论】:

  • 嗯。在.NET Core(至少在.NETStandard 1.6 中实现)中,System.Net.NetworkInformation 不包含GetHostNames()。你用的是什么版本的.NET Core
【解决方案2】:

这个答案更像是一个警告

  1. 您无法在 UWP 中临时查询环境变量,即使使用 PInvoke 也不行
  2. 您可以查询用户的信息,但绝对不能保证User API 将适用于多种用户类型,因此您需要针对空值进行防御性编码。 我不知道为什么这个 API 如此不可靠

这是一个示例 MainPage 和一个屏幕截图,显示所有返回为空白的数据。

using System;
using System.Linq;
using Windows.System;
using Windows.UI.Xaml.Controls;

namespace App_1
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            GetUserInfo();
        }

        public static async void GetUserInfo()
        {
            var users = await User.FindAllAsync(UserType.LocalUser);
            var user = await users.FirstOrDefault().GetPropertyAsync(KnownUserProperties.AccountName);
            var user_count = users.Count;
            var AccountName =
                await users[0].GetPropertyAsync(KnownUserProperties.AccountName);
            var DisplayName =
                await users[0].GetPropertyAsync(KnownUserProperties.DisplayName);
            var DomainName =
                await users[0].GetPropertyAsync(KnownUserProperties.DomainName);
            var FirstName =
                await users[0].GetPropertyAsync(KnownUserProperties.FirstName);
            var GuestHost =
                await users[0].GetPropertyAsync(KnownUserProperties.GuestHost);
            var LastName =
                await users[0].GetPropertyAsync(KnownUserProperties.LastName);
            var PrincipalName =
                await users[0].GetPropertyAsync(KnownUserProperties.PrincipalName);
            var ProviderName =
                await users[0].GetPropertyAsync(KnownUserProperties.ProviderName);
            var SessionInitiationProtocolUri =
                await users[0].GetPropertyAsync(KnownUserProperties.SessionInitiationProtocolUri);
            var User_Type = users[0].Type;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2018-03-08
    • 2018-02-12
    • 1970-01-01
    • 2020-01-02
    • 2020-09-04
    相关资源
    最近更新 更多