23. juli 2004 - 11:21Der er
7 kommentarer og 1 løsning
tjekke om en registreringsnøgle eksisterer
Jeg ønsker at tjekke om en given nøgle i windows registeringsdatabasen eksisterer, igennem et script på Windows Scripting Host.
WSH tilbyder en funktion "RegRead" som under normale omstændigheder godt kan læse en nøgle, men den crasher, hvis standardværdien i nøglen ikke er defineret.
Som I sikkert kan gætte, er det tilfældet her. En hvilken som helst work-around er velkommen.
on error resume next set shell = wscript.createobject("wscript.shell") strenabled = shell.RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\sti\") If strenabled = "Nøglenavn" then msgbox "Nøglen eksisterer" else
Yes. Men der er et problem ved den fremgangsmåde. Hvis nøglen er "tom" så at sige, altså, at det eneste der står under den er: (Standard), REG_SZ, (værdien er ikke defineret), giver scripting host'en fejl: 80070002, og påstår at nøglen ikke kan åbnes for læsning. Jeg har virkelig ingen anelse, hvorfor den ikke bare sætter værdien til at være null som resultat. I dette tilfælde skal der testes om en nøgle - der er skabt af et program og derfor er standardværdien ikke defineret - eksisterer. Men fejlen fortæller jo ikke, om mappen eksisterer, eller om standardværdien ikke er defineret.
var WshShell = new ActiveXObject("WScript.Shell"); WshShell.RegWrite("HKEY_LOCAL_MACHINE\\SOFTWARE\\MegaTest\\", "", "REG_SZ"); var temp = WshShell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\MegaTest\\"); WshShell.RegDelete("HKEY_LOCAL_MACHINE\\SOFTWARE\\MegaTest\\");
vil virke fint, da værdien "" bliver defineret. Virker det også, hvis du manuelt opretter en nøgle(selvfølgelig uden standardværdi), og forsøger, at få et script til at læse den?
1. opret en nøgle: HKEY_LOCAL_MACHINE\SOFTWARE\MegaTest\
2. put:
var WshShell = new ActiveXObject("WScript.Shell"); var temp = WshShell.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\MegaTest\\"); WshShell.RegDelete("HKEY_LOCAL_MACHINE\\SOFTWARE\\MegaTest\\"); ind i en fil noget.js
3. Go Johnny!
hvis du ikke får en fejl her, har vi måske fat i noget med noget versionsforskel. ellers er det måske en forskel i hvordan jscript og vbscript håndterer tingene.
Din løsning virkede ikke i mit tilfælde, og derfor har jeg ikke tænkt mig at give dig nogen point. (men tak for forsøget ;) Til gengælg har jeg selv løst det, men det endte med at blive en større opgave på 300 linjer indtil videre.
og grundpillen er at anvende wmi istedetfor scripting host'en.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.