Thursday 9 November 2017

Registrykey Getvalue Binary Options


Im versuchen, programmgesteuert einige Optionen in Internet Explorer wie: Aktivieren von ActiveX-Filterung Erlauben Scripting etc .. Sie sind alle in der Registrierung gespeichert, so kann ich leicht bearbeiten sie mit. Ich muss eine Website in den Tools - Kompatibilitätsansicht-Einstellungen in Internet Explorer hinzufügen. Nach einigen Recherchen, sah ich, dass diese Liste von Webseiten gespeichert ist: Das Problem ist, dass dieser Schlüssel ein Binärschlüssel ist, so dass seine ein wenig schwer zu, zunächst dekodieren, was da drin ist und es zu bearbeiten Ich sehe, dass es eine Trennzeichen zwischen jeder gespeicherten Website: Sie sehen deutlich, dass die Website. 123 und 456 befindet sich in der Liste. Ich muss eine Website hinzufügen, um diese Liste aber hier die Tatsache, dass das Trennzeichen scheint zufällig geändert. Ich baue eine vordefinierte Trennzeichen mit meiner gewünschten Website, so dass es so aussehen: Ich habe nicht versucht, diese aus Ursache Ich weiß bereits, dass es überhaupt nicht funktionieren. Das Problem ist das zufällige Trennzeichen. Gibt es eine andere Weise, meine Notwendigkeiten fortzusetzen, wird jede mögliche Hilfe geschätzt. Ich versuchte, einen Code zu migrieren, der auf. NET 3.5 laufen ließ, um auf 4 laufen zu lassen, und dieses seltsame Problem gefunden. Ive erhielt dieses unten zu einem super einfachen Testfall: Merken Sie, dass der Wert, der in diesem Registerschlüssel gespeichert wird, istUnicodequot Zuerst laufen gehendes. NET 3.5 laufen und die Ausgabe ist: Unicode 7Press irgendeine Taste, um fortzufahren. Jetzt Ziel. NET 4: 127 Drücken Sie eine beliebige Taste, um fortzufahren. Beachten Sie den zusätzlichen Zeilenumbruch. Es scheint, als würde es einen größeren Teil der Erinnerung packen. Wenn Sie im Debugger schauen, heres den Wert der Zeichenkette, die es abruft: Das Durchführen eines string. split hält an einer Zeichenfolge von Nullterminatoren, die meinen Code bricht. Als Workaround, gibt es eine Möglichkeit, kann ich quottrimquot die oben Trim () funktioniert nicht. Es scheint, wie seine nicht erwarten, dass die Null-Terminator tatsächlich in der Zeichenfolge. Ich dachte nicht, dass ein Nullterminator sogar ein Teil einer Zeichenkette in sein könnte. NET Ist dieses ein Programmfehler Gibt es irgendwo, dass die. NET 4.0 Änderungen an der RegistryKey-Klasse dokumentiert wurden, Ist dies in Zusammenhang mit diesem Beitrag Ist dies ein Defekt Irgendwelche Gedanken wäre groß. Mein Punkt war, dass eine Zeichenfolge mit einem NULL in es ist vollkommen legal in Windows. Es gibt Fälle, wo es tatsächlich verwendet wird. In der Registry gespeicherte Multistrends werden so gespeichert. So reicht es nicht, dass die Registry-Klasse versucht, NULLs von einem String (ob in der Mitte oder dem Ende des Strings) aufzuräumen, da dies die erwarteten Ergebnisse beeinflussen könnte. Vielleicht wäre es schön gewesen, wenn das Framework enthielt eine GetValue-Methode mit einigen Optionen wie TrimNulls aber sie didnt. Glücklicherweise können Sie einfach eine Erweiterung Methode, dies zu tun. Sie brauchen nicht wirklich ein RE für das Finden der NULL. Ich habe eine String-Erweiterung Methode namens LeftOf, die ein Zeichen nimmt und gibt alles, was links davon. Es grundsätzlich der oben genannte Codeblock. Als Antwort markiert von Benji22 Gibt den Typ und die Daten für den angegebenen Wertnamen, der mit einem offenen Registrierungsschlüssel verknüpft ist, ab. Sie können dies in Ihrem C-Code verwenden. Und theres auch ein C-Beispielcode im zweiten Link oben, können Sie es lesen. Wenn theres irgendein Interesse, fühlen bitte sich frei, mich zu informieren. Haben Sie einen schönen Tag Mike MSFT MSDN Gemeinschaftsunterstützung Rückgespräch zu uns Erhalten Sie oder anfordern Sie Code-Beispiel von Microsoft Erinnern Sie bitte, die Antworten als Antworten zu markieren, wenn sie helfen und unmarkieren sie, wenn sie keine Hilfe zur Verfügung stellen. Willkommen bei MSDN Foren Ich kann auch nicht repro, dass Problem auf meiner Seite, so können Sie mehr Informationen über dieses Problem, wenn das Problem auftreten, auf Ihrer Seite Ich denke, ein Screenshot und eine Kopie des Registry-Schlüssel Wert wäre hilfreich für uns zu löschen Zu diesem Thema stehen Sie vor. Bildschirmfoto. Wollen wir sehen, dass die Informationen, die Sie in Ihrem ersten Beitrag an Debugging-Zeit sagte. Der Weg für die Buchung eines Bildes: Sie können das Bild in Ihren Windows-Live-Raum hochladen, dann öffnen Sie dieses Bild in Ihrem Raum, wählen Sie dieses Bild und kopieren Sie es in das Antwort-Textfeld, und dann können Sie ein Bild auf Ihrem Beitrag einreichen. Exportieren Sie den Registrierungsschlüssel. Öffnen Sie Ihre Registrierung und suchen Sie die quotHKCU SoftwareMicrosoftCharMap quot, die Sie verwenden, und klicken Sie mit der rechten Maustaste auf die quotCharMapquot und selectExportquot zu exportieren, dass Schlüsselwert und posten Sie es in Ihrem Beitrag. Dies ist wichtig, um sicherzustellen, dass, wenn dies ein Produkt Problem oder nur ein häufiges Problem ist. Haben Sie einen schönen Tag Mike MSFT MSDN Gemeinschaftsunterstützung Rückgespräch zu uns Erhalten Sie oder anfordern Sie Code-Beispiel von Microsoft Erinnern Sie bitte, die Antworten als Antworten zu markieren, wenn sie helfen und unmarkieren sie, wenn sie keine Hilfe zur Verfügung stellen. Tuesday, December 14, 2010 5:01 PM An deiner Anfrage habe ich Screenshots hinzugefügt. Heres den Registrierungsschlüssel: Nun ist hier das richtige Verhalten mit. NET 3.5. Beachten Sie, dass ich die laufende CLR-Version für Sie zu sehen, zu erfassen, und dass eine 7-Zeichenfolge zurückgegeben wird: Nun, wenn wir auf. NET 4 CLR wechseln, erhalten wir unterschiedliche Verhalten: Ive reproduziert diese auf einer anderen Maschine. So reprod auf: Windows 7 Ultimate 32-Bit und Windows 7 Professional 64-Bit Haben Sie versuchen, auf einem Windows 7-Rechner zu reproduzieren Ja, es gab eine Änderung zwischen v3.x und v4. Ich kann Ihr Problem replizieren, aber ich weiß nicht, dass Id nennen es einen Bug. Seine sicherlich ein Verhalten ändern. Was passiert, ist, dass intern das Framework die Größe des Wertes aus der Registrierung über Win32 bekommt. Anschließend wird ein char-Array zugewiesen, um die angegebene Größe zu halten, und liest die Daten ein. Es konvertiert dann das char-Array in einen String. Wenn die Daten NULLs in der Mitte enthält, dann stört es nicht, sie zu trunkieren, weil NULL in einem String gültig ist. Einige Registry-Schlüssel sind entworfen, um dies zu unterstützen. Das Beste, was es tun könnte wäre, die NULLs vom Ende der Zeichenfolge zu trimmen, aber selbst das ist gefährlich, da Schlüssel, die NULLs in der Mitte unterstützen, im Allgemeinen doppelte NULLs am Ende benötigen. In Ihrem speziellen Fall Win32 sagt der String ist 128 Zeichen, so ist, was bekommt zugeteilt. Sie sehen die NULLs in RegEdit nicht, da es den Wert als C-String anzeigt. In v3.x verwendet das Framework kein char-Array, sondern verwendet StringBuilder. Sie verließ dann den Marshaller, um die Umwandlung zwischen nicht verwalteten Zeichen und StringBuilder zu tun. Dieser Ansatz behandelt NULLs. Dieser Ansatz führt jedoch das Risiko ein, dass ein Registrierungswert nicht ordnungsgemäß zurückgegeben wird (wenn er eingebettete NULLs unterstützt). Ob es tatsächlich einen Fehlerbericht darüber gab oder nicht, weiß ich nicht. Also, zusammenfassend, ja gab es eine Verhaltensänderung zwischen v3.x und v4. Nein, ich halte es nicht für einen Fehler. Die Lösung besteht darin, sicherzustellen, dass Sie Trim (0) auf jeder Zeichenfolge aufrufen, die Sie möglicherweise lesen, die möglicherweise mit NULLs gefüllt werden (sehr häufig beim Schreiben von C-style Strukturwerten in die Registrierung). Freitag, 17. Dezember 2010 16:05 Vielen Dank für die Info, Michael. Gt Wenn die Daten NULLs in der Mitte enthält, dann ist es nicht die Mühe, sie abzuschneiden, weil NULL in einem String gültig ist. Können Sie erklären, was los ist in meinem Beispiel dann Der Wert scheint, Unicodequot, so dass ich nicht sehen, wie Nullpunkte in der Mitte relevant ist hier. Können Sie mir helfen, zu verstehen, gtThe Lösung ist, um sicherzustellen, dass Sie Trim (0) auf eine beliebige Zeichenfolge, die Sie lesen könnten In diesem Beispiel würde dies funktionieren. Aber in einer anderen Registry zu lesen, ist das V4-Verhalten, um eine Zeichenfolge, die mit einer Null beendet wird, aber dann enthält eine Mischung aus Nullwerten und anderen Werten zurückgeben. Dieser Registry-Wert wurde von einer Nicht-Microsoft-Anwendung geschrieben, so dass es möglich war, dass es nicht korrekt geschrieben wurde, aber wieder, in 3.5 es richtig gelesen. Ich musste einen regulären Ausdruck zu greifen bis zum ersten null, um sich um diese zu konstruieren. Mein Punkt war, dass eine Zeichenfolge mit einem NULL in es ist vollkommen legal in Windows. Es gibt Fälle, wo es tatsächlich verwendet wird. In der Registry gespeicherte Multistrends werden so gespeichert. So reicht es nicht, dass die Registry-Klasse versucht, NULLs von einem String (ob in der Mitte oder dem Ende des Strings) aufzuräumen, da dies die erwarteten Ergebnisse beeinflussen könnte. Vielleicht wäre es schön gewesen, wenn das Framework enthielt eine GetValue-Methode mit einigen Optionen wie TrimNulls aber sie didnt. Glücklicherweise können Sie einfach eine Erweiterung Methode, dies zu tun. Sie brauchen nicht wirklich ein RE für das Finden der NULL. Ich habe eine String-Erweiterung Methode namens LeftOf, die ein Zeichen nimmt und gibt alles, was links davon. Es grundsätzlich der oben genannte Codeblock. Als Antwort markiert von Benji22 Freitag, 17. Dezember 2010 18:18 Im froh, dass dieses Problem gelöst worden war, obwohl ich auch dieses Problem nicht reprobieren kann In meiner Seite. Und Dank CoolDadTx für Ihre Beiträge in Foren Haben Sie ein schönes Wochenende Mike MSFT MSDN Community Support Feedback an uns Get oder Request Code Beispiel von Microsoft Bitte denken Sie daran, die Antworten als Antworten markieren, wenn sie helfen, und sie zu markieren, wenn sie keine Hilfe bieten. Ich bin mit dem v3.5-Framework und glaube, ich habe einen der Fälle, in denen ein Registrierungswert Ich brauche, wird nicht richtig zurückgegeben, weil es eine eingebettete null hat. Es ist ein verschlüsselter Wert, der gelegentlich ein quot0quot in der Mitte des Strings enthält. Das Aufrufen der. GetValue () - Funktion auf diesen Wert gibt eine abgeschnittene Version zurück - alles, was links von der quot0quot. Ich mache ein Praktikum und mein Arbeitgeber will das Projekt nicht auf das v4-Framework umstellen. Haben Sie irgendwelche Vorschläge für mich in dieser Situation Ist es möglich für mich, die RegistryKey. GetValue () - Funktion überschreiben Wenn ja, gibt es eine Möglichkeit, in das v4-Framework graben und finden Sie diesen Code, es in meinem Projekt verwenden würde ich würde Gerne weitere Informationen zu meiner spezifischen Situation liefern, wenn nötig. Lassen Sie mich wissen, welche Informationen Ihnen helfen würden. Ich bin neu in der Entwicklung und kann nicht finden, viele Informationen zu diesem Thema. Jede Hilfe wird sehr geschätzt. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, Anhänge hochzuladen. Das Problem ist mit dem Wert selbst. Verschlüsselte Werte mit eingebetteten NULLs sind keine Strings, sie sind binär (oder Multi-Strings). Wenn der Registrierungsschlüssel den Wert als einen String speichert, aber die Daten binär sind, dann wer die Daten schreibt, tut es falsch. In den Fällen, in denen binäre Daten als String (zB XML) geschrieben werden müssen, muss der Code die Binärdaten codiert haben. Base64 ist allgemein und. NET selbst unterstützt die Konvertierung zu und von Base64-codierten Zeichenfolgen. Sie können dieses Problem in ein paar Möglichkeiten lösen. Die wichtige Frage ist, was ist die Art der Registrierung Wert. Wenn es REGBINARY ist, werden die zurückgegebenen Daten ein Byte-Array sein, das Sie dann entschlüsseln können. Wahrscheinlicher aber es ist REGSZ so itll abgeschnitten werden. Leider. NET setzt keine Methode, um den Rohwert zu erhalten. Es wird immer versuchen, den Wert in einen. NET-Typ zu konvertieren. Daher müssen Sie die rohe Win32 RegQueryValueEx-Funktion verwenden, um den Rohwert zu erhalten, den Sie dann verarbeiten können. Heres, wo es hart wird. Um die Win32-API aufrufen, um einen Handle auf den Schlüssel haben. Bis v4 ist der Griff innerhalb von RegistryKey und daher unzugänglich. Die einzige Möglichkeit, die Win32-API zu verwenden, besteht darin, alle API-Aufrufe zum Öffnen, Abfragen und Schließen des Schlüssels direkt vorzunehmen. RegistryKey kann hier nicht verwendet werden. Es ist schmerzlich, aber die einzige sichere Lösung. Wenn Sie dont mind, ein wenig unsicher, dann könnten Sie Reflexion, um den Griff aus RegistryKeys privaten Bereich (Reflektor verwenden, um einen Blick auf die Quelle). Dies funktioniert nicht gut in nicht voll Vertrauen Modi und kann in der folgenden Version gebrochen werden, aber es ermöglicht Ihnen, Win32 verwenden, ohne alle öffnen / schließen in Win32 als gut. Ab mit v4 der Griff ist öffentlich verfügbar, so dass Sie nicht haben, dies zu tun - aber dann würden Sie nicht mit diesem Problem sowieso. Vielen Dank für Ihre informative und schnelle Antwort. Es wird in der Registrierung als Typ REGSZ gespeichert. Ich bin nicht sicher, ob es technisch ein binärer Wert oder ein Multi-String ist. Um ehrlich zu sein, ich glaube nicht, dass es entweder ist. Die Verschlüsselung in diesem Fall macht eine mathematische Gleichung, um einen Ascii-Code zu erhalten, und verwendet dann einen Convert. ToChar für diesen Ascii-Code für jedes Zeichen in der Anfangszeichenfolge. Gelegentlich ist das Ergebnis der Convert. ToChar ein quot0quot. Diese Zeichenfolge ist, was wird gespeichert und aus der Registrierung gelesen. So ist es eine Zeichenfolge, die aus Zeichen besteht, und manchmal ist eines dieser Zeichen das Nullzeichen. Auch dies ist alles neu für mich, so weiß ich nicht genau, welche Art von String dies ist. Vielen Dank für den Hinweis auf mich ein paar Alternativen. Ich habe ein wenig Forschung zu tun, da ich nicht genau sicher, was ein Griff ist und ich kann keine Beispiele finden (außer für eine ziemlich komplexe) der Verwendung von RegQueryValueEx in C. Es ist schön zu wissen, dass ich Alternativen haben . Thursday, January 27, 2011 6:43 PM Ruft den Typ und die Daten für den angegebenen Wert Namen mit einem offenen Registrierungsschlüssel zugeordnet. Sie können dies in Ihrem C-Code verwenden. Und theres auch ein C-Beispielcode im zweiten Link oben, können Sie es lesen. Wenn theres irgendein Interesse, fühlen bitte sich frei, mich zu informieren. Haben Sie einen schönen Tag Mike MSFT MSDN Community Support Feedback an uns Get oder Request Code Beispiel aus Microsoft Bitte denken Sie daran, die Antworten als Antworten markieren, wenn sie helfen und sie zu markieren, wenn sie keine Hilfe. Ich habe versucht, einige Code, der ausgeführt wurde migrieren. NET 3.5 auf 4 ausgeführt, und fand diese seltsame Problem. Ive erhielt dieses unten zu einem super einfachen Testfall: Merken Sie, dass der Wert, der in diesem Registerschlüssel gespeichert wird, istUnicodequot Zuerst laufen gehendes. NET 3.5 laufen und die Ausgabe ist: Unicode 7Press irgendeine Taste, um fortzufahren. Jetzt Ziel. NET 4: 127 Drücken Sie eine beliebige Taste, um fortzufahren. Beachten Sie den zusätzlichen Zeilenumbruch. Es scheint, als würde es einen größeren Teil der Erinnerung packen. Wenn Sie im Debugger schauen, heres den Wert der Zeichenkette, die es abruft: Das Durchführen eines string. split hält an einer Zeichenfolge von Nullterminatoren, die meinen Code bricht. Als Workaround, gibt es eine Möglichkeit, kann ich quottrimquot die oben Trim () funktioniert nicht. Es scheint, wie seine nicht erwarten, dass die Null-Terminator tatsächlich in der Zeichenfolge. Ich dachte nicht, dass ein Nullterminator sogar ein Teil einer Zeichenkette in sein könnte. NET Ist dieses ein Programmfehler Gibt es irgendwo, dass die. NET 4.0 Änderungen an der RegistryKey-Klasse dokumentiert wurden, Ist dies in Zusammenhang mit diesem Beitrag Ist dies ein Defekt Irgendwelche Gedanken wäre groß. Mein Punkt war, dass eine Zeichenfolge mit einem NULL in es ist vollkommen legal in Windows. Es gibt Fälle, wo es tatsächlich verwendet wird. In der Registry gespeicherte Multistrends werden so gespeichert. So reicht es nicht, dass die Registry-Klasse versucht, NULLs von einem String (ob in der Mitte oder dem Ende des Strings) aufzuräumen, da dies die erwarteten Ergebnisse beeinflussen könnte. Vielleicht wäre es schön gewesen, wenn das Framework enthielt eine GetValue-Methode mit einigen Optionen wie TrimNulls aber sie didnt. Glücklicherweise können Sie einfach eine Erweiterung Methode, dies zu tun. Sie brauchen nicht wirklich ein RE für das Finden der NULL. Ich habe eine String-Erweiterung Methode namens LeftOf, die ein Zeichen nimmt und gibt alles, was links davon. Es grundsätzlich der oben genannte Codeblock. Als Antwort markiert von Benji22 Gibt den Typ und die Daten für den angegebenen Wertnamen, der mit einem offenen Registrierungsschlüssel verknüpft ist, ab. Sie können dies in Ihrem C-Code verwenden. Und theres auch ein C-Beispielcode im zweiten Link oben, können Sie es lesen. Wenn theres irgendein Interesse, fühlen bitte sich frei, mich zu informieren. Haben Sie einen schönen Tag Mike MSFT MSDN Gemeinschaftsunterstützung Rückgespräch zu uns Erhalten Sie oder anfordern Sie Code-Beispiel von Microsoft Erinnern Sie bitte, die Antworten als Antworten zu markieren, wenn sie helfen und unmarkieren sie, wenn sie keine Hilfe zur Verfügung stellen. Willkommen bei MSDN Foren Ich kann auch nicht repro, dass Problem auf meiner Seite, so können Sie mehr Informationen über dieses Problem, wenn das Problem auftreten, auf Ihrer Seite Ich denke, ein Screenshot und eine Kopie des Registry-Schlüssel Wert wäre hilfreich für uns zu löschen Zu diesem Thema stehen Sie vor. Bildschirmfoto. Wollen wir sehen, dass die Informationen, die Sie in Ihrem ersten Beitrag an Debugging-Zeit sagte. Der Weg für die Buchung eines Bildes: Sie können das Bild in Ihren Windows-Live-Raum hochladen, dann öffnen Sie dieses Bild in Ihrem Raum, wählen Sie dieses Bild und kopieren Sie es in die Antwort-Textfeld, und dann können Sie ein Bild auf Ihrem Beitrag einreichen. Exportieren Sie den Registrierungsschlüssel. Öffnen Sie Ihre Registrierung und suchen Sie die quotHKCU SoftwareMicrosoftCharMap quot, die Sie verwenden, und klicken Sie mit der rechten Maustaste auf die quotCharMapquot und selectExportquot zu exportieren, dass Schlüsselwert und posten Sie es in Ihrem Beitrag. Dies ist wichtig, um sicherzustellen, dass, wenn dies ein Produkt Problem oder nur ein häufiges Problem ist. Haben Sie einen schönen Tag Mike MSFT MSDN Gemeinschaftsunterstützung Rückgespräch zu uns Erhalten Sie oder anfordern Sie Code-Beispiel von Microsoft Erinnern Sie bitte, die Antworten als Antworten zu markieren, wenn sie helfen und unmarkieren sie, wenn sie keine Hilfe zur Verfügung stellen. Tuesday, December 14, 2010 5:01 PM An deiner Anfrage habe ich Screenshots hinzugefügt. Heres den Registrierungsschlüssel: Nun ist hier das richtige Verhalten mit. NET 3.5. Beachten Sie, dass ich die laufende CLR-Version für Sie zu sehen, und dass eine 7-Zeichenfolgenstring zurückgegeben zu erfassen: Nun, wenn wir auf. NET 4 CLR wechseln, erhalten wir unterschiedliche Verhalten: Ive reproduziert diese auf einer anderen Maschine. So reprod auf: Windows 7 Ultimate 32-Bit und Windows 7 Professional 64-Bit Haben Sie versuchen, auf einem Windows 7-Rechner zu reproduzieren Ja, es gab eine Änderung zwischen v3.x und v4. Ich kann Ihr Problem replizieren, aber ich weiß nicht, dass Id nennen es einen Bug. Seine sicherlich ein Verhalten ändern. Was passiert, ist, dass intern das Framework die Größe des Wertes aus der Registrierung über Win32 bekommt. Anschließend wird ein char-Array zugewiesen, um die angegebene Größe zu halten, und liest die Daten ein. Es konvertiert dann das char-Array in einen String. Wenn die Daten NULLs in der Mitte enthält, dann stört es nicht, sie zu trunkieren, weil NULL in einem String gültig ist. Einige Registry-Schlüssel sind entworfen, um dies zu unterstützen. Das Beste, was es tun könnte wäre, die NULLs vom Ende der Zeichenfolge zu trimmen, aber selbst das ist gefährlich, da Schlüssel, die NULLs in der Mitte unterstützen, im Allgemeinen doppelte NULLs am Ende benötigen. In Ihrem speziellen Fall Win32 sagt der String ist 128 Zeichen, so ist, was bekommt zugeteilt. Sie sehen die NULLs in RegEdit nicht, da es den Wert als C-String anzeigt. In v3.x verwendet das Framework kein char-Array, sondern verwendet StringBuilder. Es verließ sich dann auf den Marshaller, um die Umwandlung zwischen nicht verwalteten Zeichen und StringBuilder zu tun. Dieser Ansatz behandelt NULLs. Dieser Ansatz führt jedoch das Risiko ein, dass ein Registrierungswert nicht ordnungsgemäß zurückgegeben wird (wenn er eingebettete NULLs unterstützt). Ob es tatsächlich einen Fehlerbericht darüber gab oder nicht, weiß ich nicht. Also, zusammenfassend, ja gab es eine Verhaltensänderung zwischen v3.x und v4. Nein, ich halte es nicht für einen Fehler. Die Lösung besteht darin, sicherzustellen, dass Sie Trim (0) auf jeder Zeichenfolge aufrufen, die Sie möglicherweise lesen, die möglicherweise mit NULLs gefüllt werden (sehr häufig beim Schreiben von C-style Strukturwerten in die Registrierung). Freitag, 17. Dezember 2010 16:05 Vielen Dank für die Info, Michael. Gt Wenn die Daten NULLs in der Mitte enthält, dann ist es nicht die Mühe, sie abzuschneiden, weil NULL in einem String gültig ist. Können Sie erklären, was los ist in meinem Beispiel dann Der Wert scheint, Unicodequot, so dass ich nicht sehen, wie Nullpunkte in der Mitte relevant ist hier. Können Sie mir helfen, zu verstehen, gtThe Lösung ist, um sicherzustellen, dass Sie Trim (0) auf eine beliebige Zeichenfolge, die Sie vielleicht lesen würde In diesem Beispiel würde dies funktionieren. Aber in einer anderen Registry zu lesen, ist das V4-Verhalten, um eine Zeichenfolge, die mit einer Null beendet wird, aber dann enthält eine Mischung aus Nullwerten und anderen Werten zurückgeben. Dieser Registry-Wert wurde von einer Nicht-Microsoft-Anwendung geschrieben, so dass es möglich war, dass es nicht korrekt geschrieben wurde, aber wieder, in 3.5 es richtig gelesen. Ich musste einen regulären Ausdruck zu greifen bis zum ersten null, um sich um diese zu konstruieren. Mein Punkt war, dass eine Zeichenfolge mit einem NULL in es ist vollkommen legal in Windows. Es gibt Fälle, wo es tatsächlich verwendet wird. In der Registry gespeicherte Multistrends werden so gespeichert. So reicht es nicht, dass die Registry-Klasse versucht, NULLs von einem String (ob in der Mitte oder dem Ende des Strings) aufzuräumen, da dies die erwarteten Ergebnisse beeinflussen könnte. Vielleicht wäre es schön gewesen, wenn das Framework enthielt eine GetValue-Methode mit einigen Optionen wie TrimNulls aber sie didnt. Glücklicherweise können Sie einfach eine Erweiterung Methode, dies zu tun. Sie brauchen nicht wirklich ein RE für das Finden der NULL. Ich habe eine String-Erweiterung Methode namens LeftOf, die ein Zeichen nimmt und gibt alles, was links davon. Es grundsätzlich der oben genannte Codeblock. Als Antwort markiert von Benji22 Freitag, 17. Dezember 2010 18:18 Im froh, dass dieses Problem gelöst worden war, obwohl ich auch dieses Problem nicht reprobieren kann In meiner Seite. Und Dank CoolDadTx für Ihre Beiträge in Foren Haben Sie ein schönes Wochenende Mike MSFT MSDN Community Support Feedback an uns Get oder Request Code Beispiel von Microsoft Bitte denken Sie daran, die Antworten als Antworten markieren, wenn sie helfen, und sie zu markieren, wenn sie keine Hilfe bieten. Ich bin mit dem v3.5-Framework und glaube, ich habe einen der Fälle, in denen ein Registrierungswert Ich brauche, wird nicht richtig zurückgegeben, weil es eine eingebettete null hat. Es ist ein verschlüsselter Wert, der gelegentlich ein quot0quot in der Mitte des Strings enthält. Das Aufrufen der. GetValue () - Funktion auf diesen Wert gibt eine abgeschnittene Version zurück - alles, was links von der quot0quot. Ich mache ein Praktikum und mein Arbeitgeber will das Projekt nicht auf das v4-Framework umstellen. Haben Sie irgendwelche Vorschläge für mich in dieser Situation Ist es möglich für mich, die RegistryKey. GetValue () - Funktion überschreiben Wenn ja, gibt es eine Möglichkeit, in das v4-Framework graben und finden Sie diesen Code, es in meinem Projekt verwenden würde ich würde Gerne weitere Informationen zu meiner spezifischen Situation liefern, wenn nötig. Lassen Sie mich wissen, welche Informationen Ihnen helfen würden. Ich bin neu in der Entwicklung und kann nicht finden, viele Informationen zu diesem Thema. Jede Hilfe wird sehr geschätzt. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten. Es ist Ihnen nicht erlaubt, Anhänge hochzuladen. Das Problem ist mit dem Wert selbst. Verschlüsselte Werte mit eingebetteten NULLs sind keine Strings, sie sind binär (oder Multi-Strings). Wenn der Registrierungsschlüssel den Wert als einen String speichert, aber die Daten binär sind, dann wer die Daten schreibt, tut es falsch. In den Fällen, in denen binäre Daten als String (zB XML) geschrieben werden müssen, muss der Code die Binärdaten codiert haben. Base64 ist allgemein und. NET selbst unterstützt die Konvertierung zu und von Base64-codierten Zeichenfolgen. Sie können dieses Problem in ein paar Möglichkeiten lösen. Die wichtige Frage ist, was ist die Art der Registrierung Wert. Wenn es REGBINARY ist, werden die zurückgegebenen Daten ein Byte-Array sein, das Sie dann entschlüsseln können. Wahrscheinlicher aber es ist REGSZ so itll abgeschnitten werden. Leider. NET setzt keine Methode, um den Rohwert zu erhalten. Es wird immer versuchen, den Wert in einen. NET-Typ zu konvertieren. Daher müssen Sie die rohe Win32 RegQueryValueEx-Funktion verwenden, um den Rohwert zu erhalten, den Sie dann verarbeiten können. Heres, wo es hart wird. Um die Win32-API aufrufen, um einen Handle auf den Schlüssel haben. Bis v4 ist der Griff innerhalb von RegistryKey und daher unzugänglich. Die einzige Möglichkeit, die Win32-API zu verwenden, besteht darin, alle API-Aufrufe zum Öffnen, Abfragen und Schließen des Schlüssels direkt vorzunehmen. RegistryKey kann hier nicht verwendet werden. Es ist schmerzlich, aber die einzige sichere Lösung. Wenn Sie nichts dagegen, ein wenig unsicher, dann könnten Sie Reflexion, um den Griff aus RegistryKeys privaten Bereich (Reflektor verwenden, um einen Blick auf die Quelle). Dies funktioniert nicht gut in nicht voll Vertrauen Modi und kann in der folgenden Version gebrochen werden, aber es ermöglicht Ihnen, Win32 verwenden, ohne alle öffnen / schließen in Win32 als gut. Ab mit v4 der Griff ist öffentlich verfügbar, so dass Sie nicht haben, dies zu tun - aber dann würden Sie nicht mit diesem Problem sowieso. Vielen Dank für Ihre informative und schnelle Antwort. Es wird in der Registrierung als Typ REGSZ gespeichert. Ich bin nicht sicher, ob es technisch ein binärer Wert oder ein Multi-String ist. Um ehrlich zu sein, ich glaube nicht, dass es entweder ist. Die Verschlüsselung in diesem Fall macht eine mathematische Gleichung, um einen Ascii-Code zu erhalten, und verwendet dann einen Convert. ToChar für diesen Ascii-Code für jedes Zeichen in der Anfangszeichenfolge. Gelegentlich ist das Ergebnis der Convert. ToChar ein quot0quot. Diese Zeichenfolge ist, was wird gespeichert und aus der Registrierung gelesen. So ist es eine Zeichenfolge, die aus Zeichen besteht, und manchmal ist eines dieser Zeichen das Nullzeichen. Auch dies ist alles neu für mich, so weiß ich nicht genau, welche Art von String dies ist. Vielen Dank für den Hinweis auf mich ein paar Alternativen. Ich habe ein wenig Forschung zu tun, da ich nicht genau sicher, was ein Griff ist und ich kann keine Beispiele finden (außer für eine ziemlich komplexe) der Verwendung von RegQueryValueEx in C. Es ist schön zu wissen, dass ich Alternativen haben . Thursday, January 27, 2011 6:43 PM Ruft den Typ und die Daten für den angegebenen Wert Namen mit einem offenen Registrierungsschlüssel zugeordnet. Sie können dies in Ihrem C-Code verwenden. Und theres auch ein C-Beispielcode im zweiten Link oben, können Sie es lesen. Wenn theres irgendein Interesse, fühlen bitte sich frei, mich zu informieren. Haben Sie einen schönen Tag Mike MSFT MSDN Gemeinschaftsunterstützung Rückgespräch zu uns Erhalten Sie oder anfordern Sie Code-Beispiel von Microsoft Erinnern Sie bitte, die Antworten als Antworten zu markieren, wenn sie helfen und unmarkieren sie, wenn sie keine Hilfe zur Verfügung stellen.

No comments:

Post a Comment