2014-09-26 55 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