C# 获取windows注册表编辑器版本

C# 获取windows注册表编辑器版本,c#,regedit,C#,Regedit,我正在创建一个应用程序,它应该获取整个.reg文件,然后执行它。 注册表项由我创建,我的安装程序在WinXP、7和8上运行。 但是如果我将注册表文件头更改为Windows注册表编辑器5.00版 在windows XP上执行失败。每当我将OS和标头更改为其他版本时,就会发生此错误 我的注册表文件如下所示: Windows Registry Editor Version 5.00 //- here is my problem [HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\m

我正在创建一个应用程序,它应该获取整个.reg文件,然后执行它。 注册表项由我创建,我的安装程序在WinXP、7和8上运行。 但是如果我将注册表文件头更改为
Windows注册表编辑器5.00版
在windows XP上执行失败。每当我将OS和标头更改为其他版本时,就会发生此错误

我的注册表文件如下所示:

Windows Registry Editor Version 5.00 //- here is my problem

[HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\myApp]
"DisplayName"="myApp"

[HKEY_LOCAL_MACHINE\SOFTWARE\MyApp2\myFile]
"Directory"="C:\\myFile"
我对只在不使用注册表.CurrentUser.CreateSubKey或类似工具的情况下执行.reg文件感兴趣。 这是标准行为还是我遗漏了什么? 有没有办法从C代码中检索Windows注册表编辑器版本

我在上面的示例中使用Windows7。
任何帮助都将不胜感激。

首先,.reg文件应具有以下语法:

RegistryEditorVersion
Blank line
[RegistryPath1] 
"DataItemName1"="DataType1:DataValue1"
DataItemName2"="DataType2:DataValue2"
Blank line
[RegistryPath2] 
"DataItemName3"="DataType3:DataValue3"
Blank line
在Windows 2000及更高版本中,文件以“Windows注册表编辑器版本5.00”开头(这样行就不会出现问题),而早期版本以“REGEDIT4”开头


因此,请确保您具有正确的.reg文件格式(带有空行!),并在读取文件时尝试使用System.Text.Encoding.Unicode编码

XP问题需要心理调试。版本5.00是Windows 2000的版本号,因此不太可能出现问题。.reg文件的文本编码可能很重要,对于带有该头的.reg文件,它始终是utf-16。但是,如果您使用Visual Studio编辑它,它将是utf-8。文件+另存为,单击“保存”按钮上的箭头以更改编码。排名第三(1200)。帮个忙,停止支持XP。注册表编辑器的版本取决于windows版本。我认为最好的解决方案是获得windows版本并自行计算注册表编辑器版本。您可以使用“System.OperatingSystem os=System.Environment.OSVersion;”来获取windows版本。海报使用的是这种格式,并且提到问题出在windows XP上,它早于windows 2000,使用的是REGEDIT4格式。海报也没有读取文件,因此关于Encoding.Unicode的信息与此无关。