相关疑难解决方法(0)

什么是好的唯一PC标识符?

我一直在查看本教程中的代码,我发现它用于My.Computer.Name保存不应在计算机之间漫游的设置.但是,完全有可能用户拥有两台名称相同的PC.例如,如果他们想在每台PC上拥有相同的用户名,他们最终可能会得到两台名为Username-PC的PC.

识别不同PC有哪些好方法?PC是否有与之关联的GUID,或者我是否应该考虑从某些硬件中提取序列号?我不关心通过重新安装Windows是否仍然存在.

(我链接的教程是在VB.Net中,但我在C#中实现它)

.net c# guid

41
推荐指数
5
解决办法
7万
查看次数

是否有任何方法可以唯一地识别任何计算机

我知道stackoverflow中有很多类似的问题,如下所示:

......还有几十个,我研究过它们.

问题是一些已接受的答案已将MAC地址建议为唯一标识符,这完全不正确.其他一些答案建议使用各种组件的组合,这似乎更合乎逻辑.但是,在使用组合的情况下,应该考虑哪些组件自然不可能经常更换.几天前,我们为软件许可问题开发了一个密钥生成器,我们使用CPUID和MAC的组合来唯一地识别一台Windows PC,直到实际测试我们认为我们的方法已经足够好了.具有讽刺意味的是,当我们进行测试时,我们发现有三台计算机使用我们的密钥生

那么,真的有任何方法可以唯一地识别任何计算机吗?现在我们只需要让我们的密钥生成器在windows pc上运行.使用c#的某种方式(如果可能的话)会很好,因为我们的系统是在.net上开发的.

更新:

很抱歉造成一些混乱和明显错误的警报.我们在检索HW信息的方法中发现了一些不正确之处.主要是我想删除这个问题,因为现在我自己的困惑已经消失,我确实认为两个或更多组件的组合足以识别计算机.然而,然后我决定保留它,因为我认为我应该澄清导致问题的原因,因为同样的事情可能会伤害其他人.

这就是我们正在做的事情(不包括其他代码):

我们使用getManagementInfo函数来检索MAC和处理器ID

private String getManagementInfo(String StrKey_String, String strIndex)
    {
        String strHwInfo = null;
        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + StrKey_String);
            foreach (ManagementObject share in searcher.Get())
            {
                strHwInfo += share[strIndex];
            }
        }
        catch (Exception ex)
        {
            // show some error message
        }
        return strHwInfo;
    } 
Run Code Online (Sandbox Code Playgroud)

然后在需要的地方我们使用该函数来检索MAC地址

string strMAC = getManagementInfo("Win32_NetworkAdapterConfiguration", "MacAddress");
Run Code Online (Sandbox Code Playgroud)

并检索ProcessorID

string strProcessorId = getManagementInfo("Win32_Processor", "ProcessorId");
Run Code Online (Sandbox Code Playgroud)

此时,strMAC …

c# windows uniqueidentifier

30
推荐指数
2
解决办法
2万
查看次数

WIN32_Processor ::是ProcessorId对所有计算机都是唯一的

我想使用一些独特的许可系统.我决定使用Win32_Processor管理类的ProcessorID.

我尝试了两种不同系统,具有相同的处理器类型.

它显示了两个系统的相同处理器ID.我正在使用此代码

public static String GetCPUId()
{
    String processorID = "";

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(
        "Select * FROM WIN32_Processor");

    ManagementObjectCollection mObject = searcher.Get();

    foreach (ManagementObject obj in mObject)
    {
        processorID = obj["ProcessorId"].ToString();
    }

    return processorID;
}
Run Code Online (Sandbox Code Playgroud)

c# wmi winapi

15
推荐指数
3
解决办法
3万
查看次数

CPU序列号

如何在PC中获取CPU的序列号?

x86 serial-number license-key

14
推荐指数
5
解决办法
5万
查看次数

在C#中获取唯一标识符的最佳方法

我之前曾问过类似的问题,但我现在正在减少对我需要的一些限制.

我需要在C#上有效地在计算机上找到唯一的标识符.它应该始终在任何特定的计算机上保持不变,并且可以是许多因素的组合 - 只要它易于检索.

我曾考虑将MAC地址与WMI网络查询一起使用,但这通常有10个以上的适配器.使用WHERE IPEnabled = true子句可能会更好,但我认为可能还有更好的东西.

想法?

(PS它不一定非常独特.只要碰撞的机会很小,它就是完美的.)

c# uniqueidentifier

5
推荐指数
2
解决办法
4万
查看次数

无法在C#中获取CPU序列号

我试图获取CPU序列号,但我不能这样做.我可以得到板和硬盘但不是cpu.

这是我的代码如下.我究竟做错了什么?

public static void GetClientComputerInfo()
    {
        HDDSerial = "0";
        BoardSerial = "0";
        CPUSerial = "0";

        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_DiskDrive");

            foreach (ManagementObject share in searcher.Get())
            {
                foreach (PropertyData PC in share.Properties)
                {
                    if (PC.Name == "SerialNumber")
                    {
                        HDDSerial = PC.Value.ToString();
                    }

                    if (PC.Name == "SerialNumber")
                    {
                        BoardSerial = PC.Value.ToString();
                    }

                    if (PC.Name == "ProcessorID")
                    {
                        CPUSerial = PC.Value.ToString();
                    }
                }
            }
        }
        catch
        {

        }
    }
Run Code Online (Sandbox Code Playgroud)

c# system

1
推荐指数
1
解决办法
7374
查看次数

标签 统计

c# ×5

uniqueidentifier ×2

.net ×1

guid ×1

license-key ×1

serial-number ×1

system ×1

winapi ×1

windows ×1

wmi ×1

x86 ×1