Comment puis-je lire les 64 bits du Registre des valeurs à partir de VBScript running comme une msi après son installation?
J'ai besoin de lire l'emplacement de la Temporaire ASP.NET dossier de Fichiers à partir de VBScript dans le cadre d'un post-tâche d'installation dans un programme d'installation créé à l'aide de Visual Studio 2008 projet de déploiement.
J'ai pensé que je ferais quelque chose comme ceci:
Set oShell = CreateObject("Wscript.Shell")
strPath = oShell.RegRead("HKLM\SOFTWARE\Microsoft\ASP.NET.0.50727.0\Path")
et puis concaténer strPath avec "\Temporary ASP.NET les Fichiers" et être fait avec elle.
Sur un système x64, cependant, j'obtiens la valeur de la WOW6432Node (HKLM\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\2.0.50727.0), qui me donne la version 32 bits de cadre (chemin C:\Windows\Microsoft.NET\Framework\v2.0.50727), mais sur un système x64, je veux en fait le chemin d'accès 64 bits, c'est à dire C:\Windows\Microsoft.NET\Framework64\v2.0.50727.
Je comprends que cela arrive à cause de la .vbs fichier est exécuté en utilisant les 32 bits de l'hôte de script en raison du processus parent (l'installateur) 32-bits.
Comment puis-je exécuter le script à l'aide de la version 64 bits de l'hôte de script - ou - comment puis-je lire les valeurs de 64 bits, même si le script est exécuté à l'aide de la 32 bits de l'hôte de script?
OriginalL'auteur Joergen Bech | 2009-08-04
Vous devez vous connecter pour publier un commentaire.
Pas sûr au sujet du lancement de la version 64 bits de l'hôte de script version, mais vous devriez être en mesure d'accéder à la version 64 bits du registre à partir de la 32 bits de l'hôte de script à l'aide de WMI
StdRegProv
classe, comme ceci:NB: je suis sous 32-bit OS en ce moment, ne peut donc pas vérifier que cet exemple fonctionne. Méfiez-vous des bugs 🙂
Voir aussi la Demandant de Données WMI sur une Plate-forme 64 bits article MSDN pour plus d'info sur le sujet.
Vous devez appeler
EnumKey
au lieu deGetStringValue
(avec les paramètres appropriés) et de vérifier sioOutParams.ReturnValue
est de 0. Aussi, voir les réponses à cette question: Vérifiez si la clé de registre existe.Sinon, vous pouvez interroger la valeur standard
oReg.GetStringValue , "SOFTWARE\Microsoft\ASP.NET\2.0.50727.0", , stdv
et de vérifier ensuiteIsNull(stdv)
. Technique inspirée de Les scripteursOriginalL'auteur Helen
Je pense que quelque chose comme cela, mais je n'ai pas trié comment traiter les valeurs de sortie.
OriginalL'auteur Eathen Rentz
À l'aide de Microsoft documenté de l'approache, Helen réponse est tout à fait correcte.
Cependant, selon mes propres tests, il s'avère que, il suffit d'indiquer le
__ProviderArchitecture
contexte drapeau uniquement au moment de la connexion à la StdRegProv prestataire est établi.Cela rend les choses beaucoup plus simple que seule la mise en place le prestataire doit être encapsulé dans une fonction distincte, sinon, on peut l'utilisation de l'API.
OriginalL'auteur klaus triendl
Veuillez Vérifier:
Set oShell = CreateObject("Wscript.Shell")
strPath = oShell.RegRead("HKLM64\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0\Path")
https://www.autoitscript.com/autoit3/docs/functions/RegRead.htm
OriginalL'auteur Pawan Kumar