目前就写了三个提取机器码的部分
  public static string GetCPUID()
        {
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = mc.GetInstances();
            string CPUID = null;
            foreach (ManagementObject mo in moc)
            {
                CPUID = mo.Properties["ProcessorId"].Value.ToString();
                break;
            }
            return CPUID;
        }        public static string GetHd()
        {
            string HdID = null;
            ManagementClass mc = new ManagementClass("Win32_PhysicalMedia"); 
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc) 
            { 
                HdID = mo.Properties["SerialNumber"].Value.ToString();
                break; 
            }
            return (HdID);
        }        public static string GetMac()
        {
            string MacID = null;
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc2 = mc.GetInstances();
            foreach (ManagementObject mo in moc2)
            {                MacID = mo["MacAddress"].ToString();
                break; 
            }
            return (MacID);
        }

解决方案 »

  1.   

    那么你这些信息要写入哪里,文件里吗?如果我把文件删除了,你的程序就会认为这是第一次登陆了你应该做个通过MAC地址生成注册码的功能 ,然后判断文件是否存在,里面的内容是否跟计算出来的注册码一致,来做验证.
      

  2.   

    自从90年代末,计算机的固件大多存放在EEPROM中,并且出于用户升级的便利而开放了编程的接口后,你说的这些都可以轻易改变。而且都不用改,只要在注册表中动点手脚骗骗WMI就可以了。你看的也不知道是哪年的老黄历。如果真的要防拷贝,买个10块钱的加密狗都比你在这上面研究一年管用。还有,CPU ID不是唯一的,这个我说了不知道多少次了。相同的CPU ID的CPU少说也有上亿个。
      

  3.   

    WMI是可以被关闭的不同的代码获取特征码,在管理员权限和普通权限下出来的数据是不一样的,WMI也是这样的所以,你的代码不可靠
      

  4.   

    请你们的公司老板了解一下以下建议:如果你们是个超小的公司,给你个建议,把精力放在推广上,而不是“防拷贝上”。如果你们的项目是针对大公司、大研究所的,那么其实可以让程序把用户登录信息通过“发邮件、或者http消息发送”方式发到你们自己的服务器上,以后再分析用户登录状况、所在的IP等等。软件应该有一个使用期限,比如说3个月后就不能用了。然后你们的程序应该使用clickonce方式随时(比如说每2周)自动更新到新版本上,获得新功能。软件应该有些功能是联机使用的,比如说登录功能,或者核心计算功能只能通过访问你们自己的业务服务器才能执行。总之,如果你们只会做个单机小程序,就别折腾这种东西,把眼光放长远一点。如果你们会做现代的机遇互联网的软件,那么就把软件“免费”,用服务和增值功能赚钱,把软件跟网络、跟你们的业务服务器联系在一起,这样你不用说教也自然不再纠结这种伎俩。