-2

我有一个用 C# 和 C++ 开发的 Windows 应用程序,所以它有多个 .cs 和 .cpp 文件。现在许多 .cs 文件的 GUID 格式如下:

[指南(“D01A42F5-FD89-4c8f-8065-726AD4363411”)]

我的项目中有大量的 GUID。现在我将当前的 32 位应用程序升级到 64 位,所以不希望这两个应用程序具有相同的 GUID。

无论如何都可以在不手动操作的情况下替换所有 GUID?我知道选项工具-> 创建 GUID,但对于这种情况,我需要在所有这些类文件中手动替换它。

编辑:以下两个条目与后来安装的应用程序发生冲突并被覆盖。

计算机\HKEY_CLASSES_ROOT\namespacedll\CLSID

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\namespacedll\CLSID

4

2 回答 2

3

无论如何都可以在不手动操作的情况下替换所有 GUID?

没有。

我也不明白为什么这是一个问题。32 位和 64 位通常不交互,因此除非您可以通过示例或文档链接提出真实的观点,否则这在我看来就像“忙碌的工作”——无需创建大量工作。

于 2020-08-27T09:43:53.840 回答
0

我个人的方法是创建一个应用程序来读取每个项目文件,用新生成的正则表达式匹配/替换每个单独的 GUID。

您可以采取一种更简单的方法,该方法不太可能产生重复,即使用正则表达式替换来交换和移动现有 GUID 值的一部分。

因此,您可以将所有内容与此匹配:

([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])\-([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])\-4([0-9A-F])([0-9A-F])([0-9A-F])\-([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])\-([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])

然后用移位/交换的版本替换它:

$31$1$30$2$29$3$28$4-$27$5$26$6-4$25$7$24-$8$23$9$22-$10$21$11$20$12$19$13$18$14$17$15$16

请注意,这仅适用于版本 4 GUID,因为我们需要静态 4 版本标识符。另请注意,它实际上并没有生成新的 GUID;它只是重新排列现有的。它取最后一个字符,然后是第一个字符,然后是下一个字符,然后是下一个字符,以此类推。这样做的好处是,一旦应用了转换,当前相同的所有 GUID 值将彼此相同。

例子

于 2020-08-27T09:54:47.387 回答