【问题标题】:Set Windows Network Profile to Public using C#使用 C# 将 Windows 网络配置文件设置为公共
【发布时间】:2019-11-26 20:25:15
【问题描述】:

我正在寻找一种以编程方式将以太网适配器的 Windows 操作系统网络配置文件设置为“公共”的方法

在 PowerShell 中,我可以使用这个:

Set-NetConnectionProfile -InterfaceAlias "Ethernet 3" -NetworkCategory Public

我是 C# 新手,正在寻找一种在我的应用程序中将以太网适配器的网络配置文件设置为“公共”的方法。澄清一下,这是 Windows 10 操作系统中的以太网适配器,需要设置为“公共”

这是我现在拥有的代码,但这并没有设置网络配置文件

public async Task<bool> HasInternet()
{
    await Task.Delay(0);
    var _Profile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();
    if (_Profile == null)
        return false;
    var net = Windows.Networking.Connectivity.NetworkConnectivityLevel.InternetAccess;
    return _Profile.GetNetworkConnectivityLevel().Equals(net);
}

这样的事情会起作用吗? (我在 SO 上找到的代码)

get { return (Profile & NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC) != 0; }
set
{
    // Check if value isn't changing
    if (value == IsPublicProfile) return;

    if (value)
        Profile |= NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC;
    else
        Profile &= ~NET_FW_PROFILE_TYPE2_.NET_FW_PROFILE2_PUBLIC;
}

【问题讨论】:

  • “这样的东西会起作用吗?”你试过了吗?当你尝试时会发生什么?
  • 我不确定如何测试它——猜猜这是我的问题的一部分。

标签: c#


【解决方案1】:

Powershell cmdlet 可以直接从 C# 调用。您可以使用 System.Management.Automation 创建一个 Powershell 管道,然后按照here. 所述运行您的 cmdlet@

根据您的要求,您可以这样做

PowerShell.Create().AddCommand("Set-NetConnectionProfile")
               .AddParameter("InterfaceAlias", "Ethernet 3")
               .AddParameter("NetworkCategory", "Public")
               .Invoke();

Invoke() 应该返回 PSObject 类型,您可以从中解析属性以供进一步使用。

您需要确保引用了 beginning of this blog post from Microsoft. 中概述的 System.Automation.Management 程序集

【讨论】:

  • 这会起作用,而且真的很有帮助,但我正在寻找一种在 C# 中实现它的方法。
猜你喜欢
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多