Answers:
您可以从Windows注册表获取GUID,例如:
var regpath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\\MachineGuid";
var oWSS = new ActiveXObject("WScript.Shell");
clientGUID = oWSS.RegRead(regpath);
如果用于该安装的驱动器移至另一个系统,您希望该数字更改还是保持不变?
如果安装是用ghost或其他方式克隆的,您是否希望更改此数字?您是否可以依靠始终按照Microsoft的建议进行系统准备的克隆系统?如果可以确保从未克隆安装,则SID应该很好。
如果是多重引导系统(即系统装有Windows 7和Windows XP),是否需要将这两个安装标识为唯一,相关或其他?
为什么您需要将它作为Windows安装的一部分,而不是硬件提供的东西,也许是处理器序列号?
我假设您正在针对用于清单目的的某种脚本或工具询问此问题?
为什么不在第一次运行该工具时简单地生成自己的编号并将其保存在LOCAL_MACHINE注册表配置单元中?甚至可能使用RFC4122 Type 1编号,该编号应包括网络接口之一的硬件地址。这样,您可以通过将UUID与当前的网络适配器进行比较来检查UUID是否仍属于该系统。
您要使用Windows产品ID。这是一个唯一的数字,部分是由安装的产品密钥生成的,一部分是由硬件配置生成的(包括哈希值),包括处理器序列号和第一个NIC的MAC地址。您可以在这篇TechNet文章(有些过时,但仍然有效)上阅读有关它的内容。产品ID可以在“系统信息”屏幕上找到,也可以通过几种方法以编程方式找到。
我不确定您所描述的GUID值是否确实存在。通常的做法是使用CPU或主板ID信息。
这是一个包含一些相关WMI脚本代码的论坛帖子的链接:http : //www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic59274.aspx
您可以尝试MAC地址,该地址至少应是全局唯一且永久的。这也将具有一个很好的优点,那就是您无需太多麻烦即可获得计算机的IP和主机名(并且它也将不仅限于Windows)。它不能满足您在注册表中的要求,但是您可以使用WMI代替。
此处的示例脚本:http : //www.winforums.com/showthread.php? t= 8842
若要确认特定计算机上的计算机SID,可以运行SysInternals PSGETSID%COMPUTERNAME%$。(域SID)。
http://blogs.msdn.com/aaron_margosis/archive/2009/11/05/machine-sids-and-domain-sids.aspx
编辑:删除了对注册表中机器SID的引用,这可能不是唯一的(甚至是正确的)。
我也需要找到一种方法来全局唯一地标识Windows安装。首先,为了正确分类和识别备份映像并确定哪些映像在哪些计算机上恢复。其次,为了命名用于同步文件的同步对,并根据同步所涉及的机器来确定使用哪个同步对。
在阅读了几篇文章(包括本网站上的文章)之后,我得出结论,没有简单的方法来找到Windows安装的全局唯一标识符。太可惜了 与硬件一样,软件也应具有自己的序列号。那好吧!因此,这是我的解决方法:我没有找到一个全局唯一的标识符,而是创建了一个sylized语句,该语句的灵感来自于Microsoft在Windows上命名网络驱动器的方式以及在Virtual PC中命名共享文件夹的方式:“ [[WINDOWS产品ID(作为变量)]安装在[计算机序列号(作为变量))]。尽管Windows产品标识号仅在相应产品密钥范围内是唯一的,但是在多个安装中,它仍然可能是相同的,特别是在包含工厂安装的Windows的批量生产的计算机上,但是序列号数字是唯一的,并且在一台计算机之间是不同的。上述公式仅是我需要满足的目的;我不需要SID(我假设它表示安全标识符))或其他更复杂的东西,因为这两个变量的组合完全引用了我需要识别的Windows安装,而每个单独的变量对我来说都没有用。首先,特别是,在同一制造商制造的同一产品系列中找到的Windows产品标识是相同的,这对我没有用,因为我拥有几台相同的计算机。其次,序列号不能唯一地标识,因为我在一台计算机上确实安装了多个Windows,而计算机序列号无法解决。因此,我建议使用我的方法。
另外,在询问之前:我选择不以计算机名称为基础。该信息是基于用户的,因此需要进行盘点。但是,Windows产品标识和计算机序列号已经被标识,盘点并始终连接到两个特定产品,从而消除了重新库存它们的需要。我不会选择使用硬盘驱动器的唯一标识符来标识Windows安装,因为我能够并且很容易将它们从一台机器切换到另一台机器,尤其是在驱动器容量处于恒定流量状态时。同样,我将很少使用中央处理单元或母板的识别命名法,正如此前在Shoeless的先前答复中所建议的那样。。最后,我也拒绝识别Windows安装的最明显的选择(尽管我所看到的其他任何人都没有提及它):使用产品密钥。尽管它是唯一的,但它只是安装特定版本Windows的许可证;它实际上并没有连接到特定的Windows安装,并且即使通过购买特定计算机获得了许可,也没有将其区分为安装在特定计算机上。