36539
Goto Top

Batch - Installationspfad wird nicht gefunden, wenn im Registry-Zweig eine Systemvariable enthalten ist - Fortsetzung

IHallo,

ich nehme Bezug auf meinen Erst-Beitrag zum Thema auf Batch - Installationspfad wird nicht gefunden, wenn im Registry-Zweig eine Systemvariable enthalten ist da den offensichtlich niemand mehr liest.

Ich konnte das Problem jetzt einkreisen.

set "WMPTemp=%temp%\WMPPath.vbs"  
echo strWMPPath = WScript.CreateObject("WScript.Shell").RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\wmplayer.exe\Path") > "%WMPTemp%"  
echo If Right(strWMPPath,1) ^<^> "\" Then strWMPPath = strWMPPath ^& "\" >> "%WMPTemp%"  
echo If Not Mid(strWMPPath, 2, 1) = ":" Then WScript.Quit(1) >> "%WMPTemp%"  
echo WScript.Echo strWMPPath >> "%WMPTemp%"  
for /f "tokens=1* delims=:" %%i in ('cscript //nologo "%WMPTemp%"') do set "WMPDrive=%%i:" & set "WMPPath=%%j"  
del /f /s /q "%WMPTemp%" > nul  
Entscheidend ist die 2. Zeile.

Sie ergibt bei mir für die Variable "strWMPPath":

unter XP = C:\Programme\Windows Media Player
unter WIN Vista = %ProgramFiles%\Windows Media Player

Wie bekomme ich obigem Codeschnippsel jetzt bei gebogen das es den echten Pfad auch unter Vista erzeugt.

So das es sowohl unter XP als auch Vista funktioniert und auch in Vista die Variablen "WMPDrive" und "WMPPath" echte Inhalte erhalten, also:
%WMPPath% --> WMP-Install-Pfad=\Programme\Windows Media Player\
%WMPDrive% --> WMP-Install-LW=C: (hier kann natürlich auch einen anderes LW stehen)

Danke
onegasee59

Content-ID: 100880

Url: https://administrator.de/contentid/100880

Ausgedruckt am: 25.11.2024 um 08:11 Uhr

paulepank
paulepank 03.11.2008 um 22:45:14 Uhr
Goto Top
Hallo onegasee59,

wollte mich eigenlich schon bei deinem ersten Thread beteiligen.
Da du aber nicht präzise geschrieben hast, für welche Betriebssysteme das gelten soll und ob
sogenannte Fremdprogramme zum Einsatz kommen dürfen, habe ich mich erst mal zurückgehalten.
Das sollte doch einem so erfahrenen Mitglied hier eigentlich nicht passieren face-smile

Wenn es dir immer nur noch darum geht eine 9,10 oder 11 als Ergebnis zu erhalten, benutze folgenden Code für WinXP und Vista
@echo off
for /f "tokens=3 delims=,	 " %%i in ('reg query HKLM\Software\Microsoft\Mediaplayer\PlayerUpgrade^|findstr /i playerversion') do echo %%i  

Wichtig ist der Delimiter:
Er besteht aus <Komma><Tab><Blank>

cu paulepank

EDIT: sollte man den Thread nicht eher nach Batch & Shell verschieben ?
36539
36539 03.11.2008 um 23:31:28 Uhr
Goto Top
Hallo paulepank

erstmal Danke!
Ich dachte es wäre schon im ersten Thread klar geworden. Keine Zusatztools. Das Tool soll für XP und Vista nur per Batch und vbs erstellt werden.
Es geht auch NICHT um die Versionsprüfung die erfolgt im Anschluss. Die Syntax dafür funktioniert einwandfrei sowohl unter XP als auch Vista.

Das Tool macht wie folgt:

Zuerst erfolgt Prüfung auf Betriebssystem.
Wird nicht XP oder Vista erkannt, wird das Tool mit entsprechender Fehler-Meldung abgebrochen.
Wird XP oder Vista erkannt, aber nicht 32bit und nicht DE oder ENG, wird das Tool mit entsprechender Fehler-Meldung abgebrochen.
Dann soll es auf unbekannten XP/Vista System den tatsächlichen Installationspfad vom Windows Media Player finden.
Der obige Code funktioniert unter XP einwandfrei aber nicht unter Vista, weil unter Vista im Registryzweig und dessen Wert "Path" der Verweis auf das Installationsverzeichnis nicht im Klartext wie bei XP hinterlegt ist (in meinem Fall als "C:/Programme/Windows Media Player"), sondern als "%ProgramFiles%/Windows MediaPlayer"!!!

Diesen Inhalt von "%ProgramFiles%" bekomme ich nicht extrahiert und dadurch ergibt sich mit obigem Code unter Vista ein Fehler bei der realen Pfaderkennung:

edit am 04.11.2008 08:42 Uhr
Wenn Du magst speicher dir bitte:
strWMPPath = WScript.CreateObject("WScript.Shell").RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\wmplayer.exe\Path")
WScript.Echo strWMPPath
If Right(strWMPPath,1) <> "\" Then strWMPPath = strWMPPath & "\"
If Not Mid(strWMPPath, 2, 1) = ":" Then WScript.Quit(1)
WScript.Echo strWMPPath
als "WMPpath.vbs"

Lass es mal unter XP und dann unter Vista laufen. Die Ausgabe zeigt anschaulich was ich meine:

Unter XP erzeugt "WMPpath.vbs" die Ausgabe: C:\Programme\Windows Media Player
Unter Vista erzeugt "WMPpath.vbs" die Ausgabe: %ProgramFiles%\Windows Media Player

Das bedeutet mit dem Code, hier im Thread ganz oben:
Unter XP erfolgt von "strWMPPath" die Übergabe an "WMPTemp" von: C:\Programme\Windows Media Player
Unter Vista erfolgt von "strWMPPath" die Übergabe an "WMPTemp" von: %ProgramFiles%\Windows Media Player

Das ergibt vom for-Zweig folgende Auswertung:

für XP:
%WMPPath% --> gefundener WMP-Install-Pfad=\Programme\Windows Media Player\
%WMPDrive% --> gefundenes WMP-Install-LW=C:
bei XP also wie gewünscht.

für Vista
%WMPPath% --> gefundener WMP-Install-Pfad=
%WMPDrive% --> gefundenes WMP-Install-LW=
Bei Vista also Fehler

Wie bekomme ich die "Kuh vom Eis"?

onegasee59
paulepank
paulepank 04.11.2008 um 00:14:07 Uhr
Goto Top
Hallo onegasee59,

bei deiner VBS-Lösung kann ich dir leider nicht helfen.
du wolltest u.A. eine Lösung per Batch für die Version. Die habe ich dir gegeben und sie läuft auf XP und Vista.

cu paulepank
36539
36539 04.11.2008 um 00:26:22 Uhr
Goto Top
Vielen Dank paulepank für deine Mühe,

aber ich glaube Du verstehst mich doch nicht.
Deine Lösung ist Super Ok, nutzt mir aber leider nichts.
Für die Versionsprüfung habe ich bereits ein unter XP und Vista 100% funktionierendes Codeschnippsel innnerhalb der Batch. Ich benötige tatsächlich zwingend zuerst die Syntax für das Finden des _tatsächlichen_ Installationspfades von Windows Media Player die dann nicht nur für XP sondern auch für Vista funktioniert. Sicher nur ne Kleinigkeit, wenn man weiß wie...

Dann hoffe ich mal weiter... Hiiiiiiiilfe.......baaaaaaaaastla, Biiiiiiiiiiber face-wink

Gruß und Danke nochmal.
onegasee59
paulepank
paulepank 04.11.2008 um 08:15:37 Uhr
Goto Top
... nach einer Mütze voll Schlaf

  • deinen VBS-Code habe ich ausprobiert. Ich bekommme sowohl bei XP als auch bei Vista ein leeres Fenster angezeigt.
  • Frage - was ist an folgender Aussage falsch:
der Programmpfad wird durch
echo %ProgramFiles%\Windows Media Player
angezeigt. Ob Vista oder XP, ob 27 oder 68 Bit, ob japanisch oder finnisch - der WMP steht immer im Verzeichnis "Windows Media Player". Das ist im System fest verdratet. Einzig das Laufwerk variiert.
  • Brauchst du das Laufwerk auch einzeln ?
  • Damit du auch Hilfe von anderen bekommst, solltest die den Thread w.o. beschrieben verschieben (lassen).

cu paulepank
36539
36539 04.11.2008 um 08:50:15 Uhr
Goto Top
Morgen,

Oh, Sorry. Der Code ist falsch - ich korrigiere oben - Jetzt stimmt es.

Die 2. Zeile ist eigentlich nicht erforderlich - geht aber nicht anders ,um zu zeigen was bei der Variable rauskommt.
Bei Vista erscheint nämlich ohne Zeile 2 gar nichts, weil wie schon gesagt "%ProgramFiles%\Windows Media Player" im weiteren Scriptverlauf nicht ausgewertet werden kann.
Grund - der Inhalt von %ProgramFiles% (bei Vista) ist für das Script einfach nur eine Zeichenfolge keine Variable.

Bei mir (Dualbootsytem C: = XP / G: = Vista) ergibt das als Ausgabe von Zeile 2 und letzte Zeile 5

Screenshot - vbs-Variante - XP = http://www.der-wmp.de/extra/xyz/WMPPath-vbs-Zeile-2_XP.jpg http://www.der-wmp.de/extra/xyz/WMPPath-vbs-Zeile-5_XP.jpg
Screenshot - vbs-Variante - Vista = http://www.der-wmp.de/extra/xyz/WMPPath-vbs-Zeile-2_Vista.jpg für Zeile 5 - keine Anzeige bei Vista

Ja - LW der WMP-Installation benötige ich
Ja - Antrag bei Moderatoren auf Threadverschiebung habe ich gestern gemacht.

Übrigens, so sieht es mit einer Batchvariante aus:

@echo off && setlocal
mode 120,24
rem Variante von Biber - WMP-Installationspfad finden, Abbruch wenn keine Installation von WMP 9 (oder hoeher) gefunden wird
set WMPkey="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\wmplayer.exe"  
for /f "skip=2 tokens=2*" %%i in ('reg query %WMPkey% /v Path') do set "WMPPath=%%~pnxj" & set "WMPDrive=%%~dj"  
if [%WMPPath:~-1%] neq [\] set "WMPPath=%WMPPath%\"  
echo.
echo.
echo WMP-Pfad    = %WMPPath%
echo WMP-LW      = %WMPDrive%
echo WMP-LW/Pfad = %WMPDrive%%WMPPath%
echo.
echo.
pause
endlocal

Screenshot - cmd-Variante - XP = http://www.der-wmp.de/extra/xyz/WMPPath-cmd_XP.jpg
Screenshot - cmd-Variante - Vista = http://www.der-wmp.de/extra/xyz/WMPPath-cmd_Vista.jpg

onegasee59
paulepank
paulepank 04.11.2008 um 09:56:02 Uhr
Goto Top
Hallo,
...und würdest du jetzt auf meine Frage (Aussage) eingehen ?
Falls du unbedingt alles mit vbs machen willst, klinke ich mich jetzt hier aus.

cu paulepank
36539
36539 04.11.2008 um 10:21:26 Uhr
Goto Top
Hhmm, ich habe doch schon alles beantwortet!

1. Ich brauche den Installationspfad als Variable - NICHT als feste Wertvorgabe.
D. h. ich muss erreichen das unter Vista der Inhalt der System-Variablen "%ProgramFiles%" aus dem gefundenen Installationspfad im vbs-Script oder der Batch verarbeitet wird und nicht die reine Zeichenkette "%ProgramFiles%"
Dieses Variablen-Problem ist zwar aktuell jetzt erst unter Vista aufgetaucht, könnte aber, bei entsprechend vorhandenem Pfad mit solch einer Systemvariablen, auch auf XP so auftauchen.
Die benötigte Lösung soll daher Universal funktionieren...
1.1. Bei fester Pfadangabe...
1.2. Bei Systemvariable...
...im Installationspfad = Wert "Path" im Registry-Zweig: "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\wmplayer.exe"

2. Ich brauche das LW einzeln als Variable - NICHT als feste Wertvorgabe.
3. Ich habe eine Batch-Variante und deren Ergebnis auch noch nachgeschoben.

onegasee59
paulepank
paulepank 04.11.2008 um 10:43:54 Uhr
Goto Top
auch Hhmm,
ich glaube diesmal hast du mich mißverstanden.
Das install-dir ist fest vorgegeben und muß nicht erst ermittelt werden.
3. Ich habe eine Batch-Variante und deren Ergebnis auch noch nachgeschoben.

das ist nicht gut, denn es erfolgt keine neue Benachrichtigungsmail

Aber bitte , dann eben so

@echo off
for /f "tokens=3 delims=,	 " %%i in ('reg query HKLM\Software\Microsoft\Mediaplayer\PlayerUpgrade^|findstr /i playerversion') do echo Version=%%i  
set WMP="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\mediaplayer"  
for /f "tokens=3*" %%i in ('reg query %WMP% /v "installation directory"^|findstr /i /c:"installation directory"') do echo Install-dir=%%~pnxj & echo LW=%%~dj  

jetzt noch Wünsche ? oder anders gefragt - ist die Kuh jetzt vom Eis ?face-smile

cu paulepank
36539
36539 04.11.2008 um 11:44:20 Uhr
Goto Top
Hallo paulepank,

erstmal herzlichst Danke für die Mühe,

Das install-dir ist fest vorgegeben und muß nicht erst ermittelt werden.
Klar, für den WMP und die sonstigen MS-eigenen Programme/Komponennten funktioniert das. Bei Fremdsoftware aber wie z.. Bsp für Nero nicht mehr.
Da ich den Code ja universell gestalten/einsetzen will [1], suche ich eben die Variante über Variablen auslesen und benötige daher die Daten aus:

Wert "Path" im Registry-Zweig: "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\

3. Ich habe eine Batch-Variante und deren Ergebnis auch noch nachgeschoben.

das ist nicht gut, denn es erfolgt keine neue Benachrichtigungsmail
Ja Sorry, hab es gemacht auf Grund Deiner Bemerkung "Falls du unbedingt alles mit vbs machen willst, klinke ich mich jetzt hier aus."

jetzt noch Wünsche ? oder anders gefragt - ist die Kuh jetzt vom Eis ?face-smile
Für WMP zuerstmal ja - Funktioniert einwandfrei unter XP/Vista. face-smile
[1]
Dennoch suche ich immer noch die Variablen-Variante oder den Grund warum (egal ob vbs oder batch) beim finden einer Systemvariablen (im genannten Registry-Zweig) nur deren reine Zeichenkette, statt deren Inhalt übergeben wird. Warum also, wie im hier vorliegend Fall nur "%\ProgramFiles%\Windows Media Player" anstatt dem echten Pfad "G:\Program Files\Windows Media Player" übergeben wird?

Hast Du dazu auch einen Idee?

Nicht böse sein - bitte nicht als undankbar verstehen.
Im Gegenteil dank Deiner Lösung könnte ich zumindest für den WMP erstmal weitermachen und das Gesamt-Tool fertigstellen.

Gruß
onegasee59
paulepank
paulepank 04.11.2008 um 12:16:33 Uhr
Goto Top
Hallo ,

Hast Du dazu auch einen Idee?

leider nein - vbs null Ahnung

Nicht böse sein - bitte nicht als undankbar verstehen.

nö, nur enttäuscht
Warum hast in der Überschrift eine Lösung für den WMP gesucht und schreibst nicht von Anfang an was du eigentlich willst. Für eine Variante aller oder einiger installierter Programme wäre der Ansatz ganz anders. Wir diskutieren hier einen Tag lang rum und dann sowas. Das ist etwas, was ich nicht akzeptieren kann.
Was ist eigentlich so schwer daran das Problem in der Überschrift und generell genau zu beschreiben ? Die Frage war jetzt rein rhetorisch.

cu paulepank
36539
36539 04.11.2008 um 12:26:11 Uhr
Goto Top
Hallo paulepank,

muss ja keine VBS-Lösung sein.

> Nicht böse sein - bitte nicht als undankbar verstehen.

nö, nur enttäuscht
Warum hast in der Überschrift einen Lösung für den WMP
gesucht und schreibst nicht von Anfang an was du eigentlich willst.

Der WMP war nur der Aufhänger auf Grund eine geplanten Tools.
Bitte um Entschuldigung, aber ich hatte mich so in das Problem verbohrt, das ich wohl verkannt habe wie es beim Gegenüber tatsächlich ankommt.

Was ist eigentlich so schwer daran das Problem in der Überschrift und generell genau zu beschreiben

Ich versuche es

onegasee59