在 .Net Core / UWP 中获取环境变量
Get environment variables in .Net Core / UWP
我尝试将我们的 .Net 4 桌面应用程序迁移到 UWP 应用程序,如果没有像 MSDN 这样的文档,这是一项艰巨的任务。知道我有连接到现有 Webservice 的所有方法,但是使用的方法 return 没有。
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 如此不可靠。
这是一个示例 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;
}
}
}
我尝试将我们的 .Net 4 桌面应用程序迁移到 UWP 应用程序,如果没有像 MSDN 这样的文档,这是一项艰巨的任务。知道我有连接到现有 Webservice 的所有方法,但是使用的方法 return 没有。
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 如此不可靠。
这是一个示例 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;
}
}
}