【问题标题】:C# retrieving MAC address, HHD size, ram, OS version informationC# 检索 MAC 地址、HHD 大小、内存、操作系统版本信息
【发布时间】:2013-01-28 09:09:57
【问题描述】:

我一直在使用适用于 Windows 的 Win32 类,并为基于 Windows 的机器编写了一个清单程序(显然)。

有没有办法通过程序收集系统信息并将信息转储到文本文件中?

我希望检索硬件信息(MAC 地址、硬盘驱动器大小。 安装的内存、操作系统版本等)

提前致谢

【问题讨论】:

  • WMI 类。请看一下这个问题,它可以让你抢先一步。 stackoverflow.com/questions/9546228/…
  • @JMJ,标题中的“Mac”是指 MAC 地址还是 Macintosh?
  • @TimLehner 我修正了标题。

标签: c#


【解决方案1】:

您可以为此使用 SystemInfo。它是一个命令行工具,可提供有关所有内容的信息。 http://technet.microsoft.com/en-us/library/bb491007.aspx

转储到文本文件

C:\systeminfo >>C:\a.txt

这应该会生成包含信息的文件。

如果您想从 C# 应用程序调用此命令,您可以使用 System.Diagnostic.Process 运行相同的命令,就会生成文件。

【讨论】:

  • 它有点像说运行 msinfo32 它有关于一切的信息。 OP 需要能够从 c# 中检索信息,您可以包含演示该信息的代码吗?
  • 很抱歉,因为我知道他想使用某些程序将该信息转储到文本文件中,所以我想到了这一点,并使用重定向运算符将其转储到文件中。我会进行编辑
  • 主题中的MAC指的是MAC地址。我刚刚尝试从终端运行:C:\systeminfo >>c:\a.txt,它说找不到 systeminfo 命令(?)我想从 Macintosh 环境中检索信息。我知道 Windows 的 Win32 类,并且已经围绕其中几个编写了一个广泛的程序。我正在寻找与 Macintosh -J 上的 Win32 类等效的信息
【解决方案2】:

对于 Mac 地址,您可以使用 System.Net.NetworkInformation.NetworkInterface 类找到它。

static string GetMacAddress()
{
  string macAddresses = "";
  foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
  {
    // Find all ethernet MACs
    if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet) 
    {
        macAddresses += nic.GetPhysicalAddress().ToString();
    }
  }
  return macAddresses;
}

要以编程方式查找其他系统规范,您可以使用类似于以下代码的内容。如果您前往 MSDN 页面获取Environment class,您可以找到更多有用的系统信息。

public string SysInfo() 
{
    Stringbuilder systemInformation = new Stringbuilder(string.Empty);

    systemInformation.AppendFormat("Operation System:  {0}\n", Environment.OSVersion);
    systemInformation.AppendFormat("ProcessorCount:  {0}\n", Environment.ProcessorCount);
    systemInformation.AppendFormat("SystemDirectory:  {0}\n", Environment.SystemDirectory);
    systemInformation.AppendFormat("UserDomainName:  {0}\n", Environment.UserDomainName);
    systemInformation.AppendFormat("UserName: {0}\n", Environment.UserName);

    foreach (System.IO.DriveInfo drive in System.IO.DriveInfo.GetDrives())
    {
        // Get each drive
        systemInformation.AppendFormat("\t Drive: {0}" +
                  "\n\t\t VolumeLabel: {1}" + 
                  "\n\t\t DriveType: {2}" +
                  "\n\t\t DriveFormat: {3}" +
                  "\n\t\t TotalSize: {4}" +
                  "\n\t\t AvailableFreeSpace: {5}\n",
                  DriveInfo1.Name, DriveInfo1.VolumeLabel, DriveInfo1.DriveType, 
                  DriveInfo1.DriveFormat, DriveInfo1.TotalSize, DriveInfo1.AvailableFreeSpace);
    }

    return systemInformation.ToString();
}

【讨论】:

    【解决方案3】:

    非常感谢您提出这个问题。我正在做一个相同的项目,这非常有帮助。

    答案正是我所需要的。

    我建议为 SysInfo() 函数编辑winglerw28 的代码sn-p:

            systemInformation.AppendFormat("\t Drive: {0}" +
                  "\n\t\t VolumeLabel: {1}" + 
                  "\n\t\t DriveType: {2}" +
                  "\n\t\t DriveFormat: {3}" +
                  "\n\t\t TotalSize: {4}" +
                  "\n\t\t AvailableFreeSpace: {5}\n",
                  DriveInfo1.Name, DriveInfo1.VolumeLabel, DriveInfo1.DriveType, 
                  DriveInfo1.DriveFormat, DriveInfo1.TotalSize, DriveInfo1.AvailableFreeSpace);
    

    我很确定“DriveInfo1”引用应全部更改为“驱动器”,如下所示:

                    systemInformation.AppendFormat("\t Drive: {0}" +
                          "\n\t\t VolumeLabel: {1}" +
                          "\n\t\t DriveType: {2}" +
                          "\n\t\t DriveFormat: {3}" +
                          "\n\t\t TotalSize: {4}" +
                          "\n\t\t AvailableFreeSpace: {5}\n",
                          drive.Name, drive.VolumeLabel, drive.DriveType,
                          drive.DriveFormat, drive.TotalSize, drive.AvailableFreeSpace);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 2010-11-19
      • 2012-02-05
      • 1970-01-01
      • 2017-06-19
      • 2018-05-28
      • 1970-01-01
      相关资源
      最近更新 更多