Avatar billede twinsen Nybegynder
23. juli 2004 - 11:21 Der 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.

- Troels
Avatar billede maximus25 Nybegynder
26. juli 2004 - 09:44 #1
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

msgbox "Nøglen eksisterer ikke"
end if
Avatar billede maximus25 Nybegynder
26. juli 2004 - 09:44 #2
det skulle være et svar:):)
Avatar billede twinsen Nybegynder
26. juli 2004 - 10:02 #3
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.
Avatar billede maximus25 Nybegynder
26. juli 2004 - 10:14 #4
det virker fint hos mig...hmmm
Avatar billede twinsen Nybegynder
26. juli 2004 - 10:20 #5
kode som:

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?
Avatar billede maximus25 Nybegynder
26. juli 2004 - 10:50 #6
så er msgboxen tom...uden fejl
Avatar billede twinsen Nybegynder
26. juli 2004 - 10:57 #7
Prøv at køre det som jscipt.

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.
Avatar billede twinsen Nybegynder
27. juli 2004 - 11:50 #8
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.

løsningen kan ses på:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/writing_wmi_scripts_in_jscript.asp

og grundpillen er at anvende wmi istedetfor scripting host'en.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester