PDA

Vollständige Version anzeigen : Problem: Auslesen Reg-Key per VBScript


raist10
25.05.2010, 11:44
Hi Leute!

Ich will per VBScript auf den folgende Registry-Schlüssel zugreifen:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access\InstallRoot\Path

Dummerweise bekomme ich immer nur die Fehlermeldung die ich im Anhang beigefügt habe.

Hier der auslesende Code, der ansonsten bei allen weiteren Schlüsselzugriffe die ich im Script habe klaglos funktioniert.


Function RegRead(ByVal strRegPfad)

Dim objWsh

Set objWsh = CreateObject("WScript.Shell")

RegRead = objWsh.RegRead(CStr(strRegPfad))

Set objWsh = Nothing

End Function

Wenn ich auf exakt den gleichen Schlüssel per WScript.Shell (gleicher Code) aus VBA zugreife gibt es keinerlei Probleme den Value des Schlüssels auszulesen.

Mache ich irgendwas falsch oder muss ich schlicht davon ausgehen das ich Schlüssel aus dem Wurzelpfad nicht per VBScript auslesen kann?

Gruß

Rainer

_anton_
25.05.2010, 12:12
Hallo Rainer,

probier sowas:
Const HKEY_LOCAL_MACHINE = &H80000002
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
oReg.GetStringValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Office\12.0\Access\InstallRoot", "Path", Path
If Path <> "" Then msgbox Path

mfg Anton

raist10
25.05.2010, 12:25
@ _anton_

Danke für den Hinweis, auch schon gleich ausprobiert ... aber geht genauso wenig. Bloss bringt er mir diesmal keine Fehlermeldung sondern einfach nur Null für Path.

Lass ich es unter dem SystemScripter testen funzt Dein Code (mein Code allerdings auch), aber abgespeichert in den normalen Pfad und von dort aus ausgeführt geht Dein Vorschlag auch nicht.

Ich vermute da ein Ausführungsproblem ... anscheinend braucht man irgendwelche UAC Zuordnungen unter Vista um auf den Schlüssel zugreifen zu können und VBScript hat ja leider gar keine UAC-Zuordnung.

Verdammter M*** ... wie kann ich nun per VBScript prüfen ob Access 2007 (Voll oder RT völlig egal) auf dem Rechner installiert ist!?

Hast Du da eine Idee?

Gruß

Rainer

_anton_
25.05.2010, 12:36
Hallo Rainer,

so vllt:
<fieldset><legend>Code:</legend><div ID='code'><span style="font-family: Courier New,FixedSys;"><br><span style="color: #0000CC;">On Error Resume Next</span> &nbsp; &nbsp;<br><span style="color: #0000CC;">Set</span> objAccess = CreateObject(&quot;Access.Application&quot;) &nbsp; <br><span style="color: #0000CC;">If</span> Err.Number = 0 <span style="color: #0000CC;">Then</span> MsgBox objAccess.Version &nbsp; <br>objAccess.Quit <br><br></span></div><br></fieldset>

mfg Anton

raist10
25.05.2010, 12:45
@ _anton_

Auf die Idee war ich als Erstes gekommen, Problem ist nur das die CreateObject-Methode auf Access.Application nicht in einer reinen Runtime-Umgebung funktioniert und deswegen immer False liefert obwohl die Runtime installiert ist.

Bin langsam am verzweiflen. :(

Möchte halt schlicht vorm Start meiner DB prüfen ob Access 2007 auf dem Rechner drauf ist (völlig egal ob als Voll oder RT) und wenn nicht dem Nutzer anbieten die Runtime zu installieren.

Langsam aber sicher sehe ich keine andere Möglichkeit als schlicht das Verzeichnis Program Files, bzw. Program Files (x86) zu durchlaufen und nachzugucken ob ich unter Microsoft Office\Office12 die MSACCESS.EXE finde.

Aber was ist wenn jemand Access woanders installiert hat!?

Gruß

Rainer

raist10
25.05.2010, 19:25
Tja, habe das Problem mittlerweilen gefunden (allerdings habe ich die folgenden Beobachtungen unter Vista 32 und 64 bit gemacht, für Windows 7 bitte mit Fragezeichen versehen).

Wenn man die Registry per VBScript anspricht - egal welchen Schlüssel, bzw. egal aus welchem Root - kommt die Fehlermeldung immer.

Setzt man aber zuvor ein On Error Resume Next unterdrückt man nicht nur die Fehlermeldung und springt zur nächsten Zeile weiter, sondern der Registry-Zugriff erfolgt ganz normal ... also der Schlüssel wird ausgelesen und auch geschrieben.

Ich kann nur vermuten das es damit zusammenhängt das ein VBScript keine UAC-Kennung besitzt und deswegen die Fehlermeldung beim Zugriff auf die Registry kommt aber wenn man die unterdrückt dann der Zugriff auf die Registry ganz normal abgehandelt wird.

Wieso wundert mich bei Microsoft eigentlich gar nichts mehr? ^^

EDITH: Korrektur ... ich muss die Aussage ergänzen. Unter 64 bit gibt es noch ein Problem und das dürfte mir wohl die Sorgen bereitet haben. Die Registry-Einträge liegen nicht in HKLM\Software\Microsoft\Office\12.0\Access ... sondern in HKLM\SOFTWARE\WOW6432\Microsoft\Office\12.0\Access ... . Normale Registry-Zugriffe durch Programm scheinen genauso wie beim Thema Folder System32 und SysWOW64 umgeleitet zu werden, aber bei VBScript nicht und die Fehlermeldung rührt schlicht daher das der Schlüssel unter HKLM\Software\Microsoft nicht existiert. Manchmal funktioniert es aber doch mit der Umleitung ... so mir vorhin passiert und deswegen das Thema mit unterdrücken der Fehlermeldung und trotzdem erfolgt Zugriff.

Dürfte für alle interessant sein die Scripte mit Registry-Zugriffen auch unter Windows 7 64-bit einsetzen wollen.

Gruß

Rainer