gpt4 book ai didi

c# - 虚拟机上的重复 GUID

转载 作者:太空狗 更新时间:2023-10-29 17:55:34 25 4
gpt4 key购买 nike

在 VMWare 中恢复快照时,我已经成功地使用一个简单的 C#.NET scratch 程序重现相同的 GUID(是的,你没有看错)。客户端虚拟机是 Windows Server 2008 R2 64 位。我尝试过 Windows XP 和 Windows 7 64 位客户端,但均未成功。我使用的 VMWare 版本是 6.5.3 build-185404。我所做的就是恢复到以前的快照,将临时程序复制到虚拟机,然后运行它。

为那些不相信的人提供一些证据(我不怪你):http://i.imgur.com/KkSdr.png

这是 scratch 程序的代码:

using System;
using System.Globalization;

namespace DuplicateGuid
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0} {1}", Guid.NewGuid(), DateTime.Now.Ticks));

Console.ReadKey();
}
}
}

鉴于滴答计数不同,任何人都可以阐明这是如何可能的吗?

最佳答案

能否请您发布一个 GUID。图片好像坏了。

参见 http://en.wikipedia.org/wiki/Globally_unique_identifier特别是“算法”。您在 Windows 2008 R2 x64 下使用的平台很可能使用的是版本 4 GUID。在这种情况下,GUID 是使用伪随机数据生成的。由于 CPU 处于相同状态,因为您正在将其从我假设的内存快照(正确?)而不是断电快照恢复过来,因此您从伪随机生成器中获得了重复的数字。

对于操作系统来说,在启动时初始化一个伪随机种子是相当普遍的,它会依次从列表中拉取数字以产生随机数。这种情况发生在 Linux 世界中,您很可能观察到相同的行为。因为数字序列尚未重新初始化,并且您正在恢复到内存图像,所以您得到的是相同的数字。

使用 VS 2010 的 GUID 生成器,我在 Windows 7 上获得了 V4 GUID。

要解决此问题,我会首先尝试应用可能会解决此问题的 Windows 安全修复程序。问题很可能出在 Guid.NewGuid 方法中调用的 ole32.dll 中,并且较新的版本可能会重新设置伪随机数,因为您在较新的 Windows 版本上没有得到它。

否则要在当前平台上解决此问题,您可以:

  1. 根据 OSF 规范中指定的 MAC 和时间数据生成您自己的 GUID。

  2. 尝试在调用 NewGuid 之前调用 new Random()。这可能不太可能,但很容易测试。

  3. 不要从内存图像还原。

希望这对您有所帮助。毫无疑问,您不是第一个遇到这个问题的人,这就是为什么较新的平台可能恢复到以前使用 MAC 和时间数据的方法。

关于c# - 虚拟机上的重复 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5729446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com