【问题标题】:Not Changing Computer Name, but changing $env:ComputerName不更改计算机名称,但更改 $env:ComputerName
【发布时间】:2020-10-06 06:10:08
【问题描述】:

我正在尝试更改 Windows 机器上的 ComputerName。我得到了一个非常奇怪的结果。

我使用的代码是:

public class MachineService
{
      [DllImport("Kernel32.dll")]
      [return: MarshalAs(UnmanagedType.Bool)]
      private static extern bool SetComputerNameA([MarshalAs(UnmanagedType.LPStr)] string computerName);

      [DllImport("Kernel32.dll")]
      [return: MarshalAs(UnmanagedType.Bool)]
      private static extern bool SetComputerName([MarshalAs(UnmanagedType.LPStr)] string computerName);

      [DllImport("Kernel32.dll")]
      [return: MarshalAs(UnmanagedType.Bool)]
      private static extern bool SetComputerNameEx(ComputerNameFormat NameType, [MarshalAs(UnmanagedType.LPStr)] string computerName);


    public static bool ChangeName(string name)
    {
      var envVar = SetComputerName(name);
      var ex = SetComputerNameEx(ComputerNameFormat.ComputerNamePhysicalNetBIOS, name);
      return envVar && ex;
    }
}

它确实设置了环境变量 ComputerName,但它没有设置设备的名称。请看下面的图片。

编辑 它已更改注册表。

【问题讨论】:

  • 即使在重启后?
  • 是的,我重新启动它并没有改变
  • 如果我正确阅读了documentation,您应该使用ComputerNamePhysicalDnsHostname 而不是ComputerNamePhysicalNetBIOS,并且您不应该在SetComputerNameEx 之前调用SetComputerName
  • @SamAxe 这就是问题所在。如果您添加答案,我会投票赞成。谢谢!

标签: c# .net-core unmanaged


【解决方案1】:

如果我正确阅读了documentation,您应该:

  • 使用ComputerNamePhysicalDnsHostname 而不是ComputerNamePhysicalNetBIOS
  • 你不应该在SetComputerNameEx之前调用SetComputerName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2012-01-16
    • 2013-04-19
    • 2018-07-08
    • 2023-04-05
    相关资源
    最近更新 更多