Ich erstelle einen MSBuild-Task, der die Registrierung für einen bestimmten Registrierungsschlüssel liest. Wenn ich dieselbe Codezeile (siehe unten) in einer Konsolenanwendung schreibe, wird das erwartete Ergebnis zurückgegeben. Wenn es sich jedoch innerhalb der MSBuild-Aufgabe befindet, wird nichts zurückgegeben.Wie lesen Sie einen Registrierungswert mithilfe einer benutzerdefinierten Msbuild-Aufgabe?
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
würde ich den obigen Code erwarten Nothing
zurück, wenn der Schlüssel/Wert-Paar existiert nicht, und gibt den Wert, wenn es nicht vorhanden ist. Ich bekomme Nothing
, wenn der MSBuild-Task ausgeführt wird. Gibt es ein Attribut, das ich auf die Execute-Funktion der MSBuild-Aufgabe anwenden muss, um es zu sagen, dass es die Registrierung lesen muss?
EDIT:
Hier ist das, was aus der MSBuild-Aufgabe ausgeführt wird:
Return Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\", "SQLPath", Nothing)
Ich glaube, dies durch die Registry Redirector auf meinem Vista x64 Maschine MSBuild verursacht werden in 32-Bit ausgeführt wird. Gibt es eine Möglichkeit, dass Sie die benutzerdefinierte MSBuild Aufgabe (in VB.Net geschrieben) sagen können, in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\
dann nur, wenn nichts existiert dann in HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSSQLServer\Setup\
suchen?
Danke,
Scott Blau
haben Sie ein Tool wie RegMon versucht, um sicherzustellen, dass Sie den richtigen Registrierungsschlüssel lesen, wenn es von MSBuild getroffen wird? Könnte es sein, dass 32-Bit/64-Bit Munging läuft? –
Guter Gedanke, ich werde mir das ansehen ... – Scott
Also, 'RegMon' wird durch' Process Monitor' ersetzt und es meldet, dass, wenn ich die Konsolenanwendung zum Lesen der Registrierung verwende, es über TestingRegistry erfolgreich gelesen wird. exe (Programmname). Aber wenn ich den Task ausführe, verwendet er Shows devenv.exe als aufrufende Anwendung und versucht tatsächlich, diesen Schlüssel zu öffnen: 'HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSSQLServer \ Setup' und einen' NAME NOT FOUND' Fehler zu erhalten. Warum sollte ein 'Wow6432Node' Element in den Pfad eingefügt werden? – Scott