Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用VisualStudio解决方案/项目中的新GUI替换所有现有的GUI? 我有一个用C和C++开发的Windows应用程序,所以它有多个.cs和.cpp文件。现在,许多.cs文件的GUID格式如下:_C#_Windows_Com_Guid_Gui Designer - Fatal编程技术网

C# 如何用VisualStudio解决方案/项目中的新GUI替换所有现有的GUI? 我有一个用C和C++开发的Windows应用程序,所以它有多个.cs和.cpp文件。现在,许多.cs文件的GUID格式如下:

C# 如何用VisualStudio解决方案/项目中的新GUI替换所有现有的GUI? 我有一个用C和C++开发的Windows应用程序,所以它有多个.cs和.cpp文件。现在,许多.cs文件的GUID格式如下:,c#,windows,com,guid,gui-designer,C#,Windows,Com,Guid,Gui Designer,[Guid(“D01A42F5-FD89-4c8f-8065-726AD4363411”)] 在我的项目中有大量的guid。现在我正在将当前的32位应用程序升级到64位,所以我不希望这两个应用程序都有相同的guid 是否仍然可以在不手动执行的情况下替换所有guid?我知道选项Tools-->Create GUID,但在这种情况下,我需要在所有这些类文件中手动替换它 编辑:下面两个条目发生冲突,并被稍后安装的应用程序覆盖 计算机\HKEY\U类\U根\namespacedll\CLSID 计算机\

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

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

是否仍然可以在不手动执行的情况下替换所有guid?我知道选项Tools-->Create GUID,但在这种情况下,我需要在所有这些类文件中手动替换它

编辑:下面两个条目发生冲突,并被稍后安装的应用程序覆盖

计算机\HKEY\U类\U根\namespacedll\CLSID

计算机\HKEY\U本地\U计算机\SOFTWARE\Classes\namespacedll\CLSID

是否仍然可以在不手动执行的情况下替换所有guid

没有


我也不明白为什么这是一个问题。32位和64位通常不会相互作用,因此,除非您能通过示例或文档链接来说明问题,否则我觉得这就像是“繁忙的工作”——无需创建大量工作。

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

有一种更简单的方法不太可能产生重复的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值将彼此相同


我建议用您最喜欢的脚本语言编写一个脚本,以查找并替换GUI。如果你真的需要这样做。除了C#/.net之外,我不懂任何脚本语言。那么你能帮我一下吗?@ksrds那么为什么不用C写一些代码呢?@ksrds然后要么学习一些脚本语言(powershell与C很好地集成)要么编写一个C程序。在这两种情况下,一些正则表达式可能是有用的。如果您密切注意,您应该会发现两个版本的程序使用相同共享注册表位置的每个地方,也使用相同的共享值。此外,不要仅依靠源代码来查找冲突,因为Windows在运行时仅针对32位应用程序将这些密钥中的许多重定向到WOW6432节点子密钥下的阴影位置。Microsoft在Win64上做了大量工作,以确保您不必像您认为的那样更改GUID。我现在没有合适的答案,但请分享您认为存在真正冲突的确切细节。事实上,我要求同时使用这两个应用程序。所以在不改变GUIDs的情况下;注册表冲突,所以不能让两个应用程序同时工作。真的吗?因为据我所知,32位和64位注册表是分开的。64位应用程序应该访问64位注册表,甚至看不到32位值。是的,两个位应用程序都有两个通用项。HKEY_LOCAL_MACHINE\appname.dllname\CLSID和另一个位于HKEY_LOCAL_MACHINE\SOFTWARE\Classes\appname.dllname\CLSID,它将覆盖稍后安装的,因此只工作了一秒钟。