C# 从虚拟机中获取唯一标识号的最佳方法是在主机上获得相同的标识号

C# 从虚拟机中获取唯一标识号的最佳方法是在主机上获得相同的标识号,c#,virtual-machine,unique-id,C#,Virtual Machine,Unique Id,我试图找到一个唯一的ID,它将与虚拟机和主机相同 我尝试使用监视器ID和bios编号,但它们可以为不同的最终用户重复 using (ManagementObjectSearcher monitorSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor")) { foreach (ManagementObject monitor in monitorSearcher.Get(

我试图找到一个唯一的ID,它将与虚拟机和主机相同

我尝试使用监视器ID和bios编号,但它们可以为不同的最终用户重复

using (ManagementObjectSearcher monitorSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor"))
{
    foreach (ManagementObject monitor in monitorSearcher.Get())
    {
        String MonitorName = monitor["Name"].ToString();
        String MonitorId = monitor["DeviceId"].ToString();

        Console.WriteLine("Monitor name: {0}", MonitorName);
        Console.WriteLine("Monitor id:   {0}", MonitorId);
    }
}

ManagementClass managementClass = new ManagementClass("Win32_BIOS");
ManagementObjectCollection instances = managementClass.GetInstances();
foreach (ManagementBaseObject instance in instances)
{
    string version = instance.Properties["SMBIOSBIOSVersion"].Value.ToString();
    
    Console.WriteLine("The version is :" + version.ToString());
}

我读了很多书,浏览了各种各样的主题和论坛,但我找不到信息,或者根本不可能找到信息?可能至少有一个序列号会在主机和虚拟机上重复出现?

您想实现什么?我们谈论的是什么样的虚拟机?VMware?虚拟箱?还有别的吗?所有这些VMware、VirtualBox等等。我试图在主机和虚拟机上找到相同的东西。这是一些硬件ID。这是一样的。而且,没有一个最终用户可以获得相同的ID。因此,您正在寻找一种与供应商无关的解决方案。它应该适用于VMware、VB等等。。。虚拟机是否“知道”自己是虚拟机?你是否有管理自由,比如给他们起机器名?不,我没有给他们起名字的选择权。这是针对独立最终用户的解决方案。我正在寻找一个参数(硬件ID),该参数将缩进到运行的主机上,并且对于所有在其上运行的虚拟机都是相同的。这里的问题是,虽然很容易确定您是否在虚拟机上,但虚拟机的整个要点主要是拥有一个对主机没有任何穿孔的沙箱。如果没有任何简化任务的假设,比如与主机共享网络适配器等,我认为这不会太直接。