2014-09-26 152 views
1

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

我的REG文件是这样的:

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" 

我感兴趣的执行.reg文件只是没Registry.CurrentUser.CreateSubKey或相似。 它是标准行为还是我错过了某些东西? 有没有办法从C#代码中检索Windows注册表编辑器的版本?

我在上面的例子中使用Windows 7。 任何帮助将不胜感激。

+2

XP的问题需要心理调试。版本5.00是Windows 2000的版本号,因此不太可能成为问题。 .reg文件的文本编码可能很重要,具有该头文件的.reg文件始终是utf-16。如果你用Visual Studio编辑它,它将是utf-8。文件+另存为,单击保存按钮上的箭头更改编码。列表中第三个(1200)。请大家帮忙,停止支持XP。 – 2014-09-26 20:47:50

+1

注册表编辑器版本取决于windows版本。我认为最好的解决方案是获取Windows版本并通过自己计算注册表编辑器版本。您可以使用“System.OperatingSystem os = System.Environment.OSVersion;”获取Windows版本。 – Astro 2014-09-28 07:44:26

回答

1

首先,一个.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编码在阅读您的文件。

+0

海报正在使用该格式,并且提到过问题在于Windows ** XP **,它早于Windows 2000并使用REGEDIT4格式。海报也不读*文件,所以有关Encoding.Unicode的信息在这里是无关紧要的。 – 2014-10-09 15:44:23