Ich stecke gerade etwas in der Klemme. Ich schreibe gerade einen Test, bei dem ein Testregistryschlüssel in die Registry geschrieben, gelesen und in eine Datei geschrieben wird (so als würde man diesen Schlüssel exportieren). Mein Problem ist: Es gibt ja auch den Typ REG_EXPAND_SZ. Wenn ich diesen Wert schreibe, alles kein Problem. Will ich ihn jedoch lesen und in eine Datei schreiben, dann habe ich das Problem.
Würde ich denselben Wert exportieren, kommt (in Hexadezimalzahlen) was vollkommen anderes heraus, als wenn ich das mit meinem aktuellen Programm lese. Angenommen, ich habe einen Wert mit dem Namen TestExpandString mit dem Wert "Dies ist ein %PATH%". Dann kommt beim Export genau das in hexadezimalen Zahlen, wenn ich diesen Wert lese, dann übergibt er mir statt %PATH% den Wert von %PATH%.
Mein Code zum Lesen von einem Wert des Typs REG_EXPAND_SZ sieht folgendermaßen aus:
case RegistryValueKind.ExpandString: string addexpstr = String.Format("\"{0}\"=hex(2):{1}", values2[k], ConvertToHex(basekey.GetValue(values2[k]).ToString())); erg.Add(addexpstr); break;
Ich schreibe den Wertnamen (values2[k]) und dessen Wert (basekey.GetValue(values2[k]).ToString()) in Hexadezimalzahlen (dafür ist die selbstgeschrieben Funktion ConvertToHex zuständig). erg ist eine Liste vom Typ String.
Weil ich leider - krankheitsbedingt - noch nicht dazu gekommen bin, das ganze auszutesten. Ich gebe dir Feedback, sobald ich noch dazu komme. Versprochen ;)
Danke :) Jetzt gehts mir wieder besser ... Ich hoffe dir noch diese Woche Rückmeldung zu geben ... da ich auch immer dankbar für jeden bin, der sich hilfsbereit zeigt und sich auch die Zeit dafür nimmt :)
RegistryValueKind.ExpandString ist eine (...) auf NULL endende Zeichenfolge, die nicht erweiterte Verweise auf Umgebungsvariablen (z. B. %PATH%) enthält, die bei Abruf des Werts erweitert werden. Dieser Wert entspricht dem Win32-API-Registrierungsdatentyp REG_EXPAND_SZ.
Wenn ich das richtig verstanden habe willst du aber das RAW-Value des Registry-Keys. Das geht mit den Registry-Funktionen des .Net leider nicht. Dazu musst du die API-Funktion RegQueryValueEx bemühen.
// This signature will not get an entire REG_BINARY value. It will stop at the first null byte. [DllImport("advapi32.dll", CharSet = CharSet.Unicode, EntryPoint = "RegQueryValueExW", SetLastError = true)] static extern int RegQueryValueEx( UIntPtr hKey, string lpValueName, int lpReserved, out uint lpType, System.Text.StringBuilder lpData, ref uint lpcbData);
Von ner Bewertung ganz zu schweigen :/