Wie lese ich die 64-bit-Registry-Werte von VBScript ausgeführt als eine msi-task nach der installation?
Muss ich Lesen, den Speicherort des Temporären ASP.NET Dateien Ordner von VBScript als Teil einer post-installation tasks in einen installer erstellt mit Visual Studio 2008 deployment-Projekt.
Ich dachte, ich würde etwas wie das hier tun:
Set oShell = CreateObject("Wscript.Shell")
strPath = oShell.RegRead("HKLM\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0\Path")
und dann verketten strPath mit "\Temporary ASP.NET Dateien" und mit ihm getan werden.
Auf ein x64-system, jedoch bekomme ich den Wert aus dem WOW6432Node - (HKLM\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\2.0.50727.0), die gibt mir die 32-bit-framework-Pfad (C:\Windows\Microsoft.NET\Framework\v2.0.50727), aber auf einem x64 system, eigentlich will ich die 64-bit-Pfad, d.h. C:\Windows\Microsoft.NET\Framework64\v2.0.50727.
Ich verstehe, dass dies geschieht, weil die .vbs-Datei ausgeführt wird, mithilfe der 32-bit-Scripting-host durch den übergeordneten Prozess (der installer), die 32-bit selbst.
Wie kann ich das Skript mit der 64-bit-Scripting-host - oder - wie kann ich Lesen Sie die 64-bit-Werte, selbst wenn das Skript ausgeführt wird, mithilfe der 32-bit-Scripting-host?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher über die Einführung der 64-bit-Scripting-host-version, aber Sie sollten in der Lage sein, um Zugriff auf die 64-bit-Registrierung-von der 32-bit-Scripting-host mithilfe der WMI -
StdRegProv
Klasse, wie folgt:NB: ich bin unter einem 32-bit OS jetzt ist, kann so nicht überprüfen, dass dieses Beispiel funktioniert. Achtung, bugs!: -)
Siehe auch die Anfordern von WMI-Daten, die auf einem 64-bit-Plattform MSDN-Artikel für mehr info über das Thema.
EnumKey
stattGetStringValue
(mit entsprechenden Parametern) und prüfen, oboOutParams.ReturnValue
0 ist. Auch finden Sie Antworten in dieser Frage: Überprüfen Sie, ob registry-Schlüssel vorhanden ist.oReg.GetStringValue , "SOFTWARE\Microsoft\ASP.NET\2.0.50727.0", , stdv
und überprüfen Sie dannIsNull(stdv)
. Technik inspiriert von Die Scripting GuysIch denke, so etwas wie dieses, aber ich habe nicht aussortiert wie die Verarbeitung der output-Werte.
Microsoft dokumentiert approache, Helen ' s Antwort ist absolut korrekt.
Aber nach meinen eigenen tests es stellt sich heraus, dass es ist genug, um geben Sie die
__ProviderArchitecture
Kontext fahne, nur an der Zeit den Anschluss an die StdRegProv-Anbieter etabliert ist.Dies macht die Dinge viel einfacher als nur das einrichten der Anbieter muss sein, gekapselt in einer separaten Funktion, ansonsten kann man mit dem regulären API.
Bitte Prüfen:
Set oShell = CreateObject("Wscript.Shell")
strPath = oShell.RegRead("HKLM64\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0\Pfad")
https://www.autoitscript.com/autoit3/docs/functions/RegRead.htm