[BUG] Supp funktioniert nicht richtig

jnko
Beiträge: 18
Registriert: 12 Okt 2016, 09:58

[BUG] Supp funktioniert nicht richtig

Beitrag von jnko »

Ich habe hier folgendes Problem was für mich nach einem Bug in Winst aussieht.

Ich möchte die Path-Variable mit dem Supp Befehl ändern, soweit so gut.
Das Script dazu sieht so aus:

Code: Alles auswählen

[Actions]
DefVar $JAVA_HOME$
Set $JAVA_HOME$ = "%" + "JAVA_HOME" + "%"

Registry_Set_JAVA_HOME /SysNative

[Registry_Set_JAVA_HOME]
OpenKEY [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
Set "JAVA_HOME"           = REG_EXPAND_SZ:"%ProgramFiles32Dir%\Java\jre1.8.0_101"
Set "LEJOS_EV3_JAVA_HOME" = REG_EXPAND_SZ:"$JAVA_HOME$"
Supp "Path"               ; "$JAVA_HOME$\bin"
Supp "Path"               ; "C:\ProgramData\Oracle\Java\javapath"
Supp "Path"               ; "$JAVA_HOME$\bin\gleich\da"
FlushKey

Ich würde jetzt erwarten, dass die Path-Variable in der Registry so aussieht. (den uninteressanten Teil habe ich hier mal herausgenommen)

Code: Alles auswählen

...;%JAVA_HOME%\bin;C:\ProgramData\Oracle\Java\javapath;%JAVA_HOME%\bin\gleich\da
Tatsächlich bekommt ich aber:

Code: Alles auswählen

...;%JAVA_HOME%\bin;C:\ProgramData\Orac;%JAVA_HOME%\bin\gleich\da
Aus irgendeinem Grund wird beim zweiten Supp alles hinter C:\ProgramData\Orac abgeschnitten.

Der Originale Key sieht so aus

Code: Alles auswählen

C:\Python27\Lib\site-packages\PyQt4;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Python27;C:\Python27\DLLs;C:\Python27\Scripts;C:\Python27\gnuplot\binary;%JAVA_HOME%\bin;C:\ProgramData\Orac;%JAVA_HOME%\bin\gleich\da

Übersehe ich hier irgendwas oder ist das wirklich ein Fehler?

Es läuft die Version 4.0.7.1.3
Zuletzt geändert von jnko am 18 Nov 2016, 12:31, insgesamt 1-mal geändert.
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von larsg »

Probier mal Flushkey hinter jeden Supp-Befehl, oder alternativ deine Supp-Befehle auf 3 Registry-Sektionen aufzuteilen.

Edit: Was spricht sonst dagegegen, die 3 neuen Werte in einen Supp-Befehl zu packen?
jnko
Beiträge: 18
Registriert: 12 Okt 2016, 09:58

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von jnko »

larsg hat geschrieben:Probier mal Flushkey hinter jeden Supp-Befehl, oder alternativ deine Supp-Befehle auf 3 Registry-Sektionen aufzuteilen.

Edit: Was spricht sonst dagegegen, die 3 neuen Werte in einen Supp-Befehl zu packen?

Ja, das funktioniert natürlich. Trotzdem sollte mit Supp ja das "Array" erweitert werden und beim zweiten Supp fehlt dann einfach ein Teil des Strings.
FlushKey hinter jedem Supp bringt hier übrigens keine Änderung.
larsg
Beiträge: 283
Registriert: 16 Dez 2014, 18:06

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von larsg »

ja. richtig lesen hilft :roll: :oops:
Benutzeravatar
wolfbardo
uib-Team
Beiträge: 1354
Registriert: 01 Jul 2008, 12:10

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von wolfbardo »

Hallo,

ohne weitere Infos Logs ist das Problem nicht wirklich nachvollziehbar.

"Hier" funktioniert:

Code: Alles auswählen

[Actions]
setLogLevel=7
DefVar $JAVA_HOME$
DefVar $dummy$
DefVar $Path$
set $Path$ = EnvVar ("Path")
Set $JAVA_HOME$ = "%" + "JAVA_HOME" + "%"

Set $dummy$=GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] Path")

Registry_Set_JAVA_HOME /SysNative
UpdateEnvironment
Set $dummy$=GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] Path")


[Registry_Set_JAVA_HOME]
OpenKEY [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
Set "JAVA_HOME"           = REG_EXPAND_SZ:"%ProgramFiles32Dir%\Java\jre1.8.0_101"
Set "LEJOS_EV3_JAVA_HOME" = REG_EXPAND_SZ:"$JAVA_HOME$"
Supp "Path"               ; "$JAVA_HOME$\bin"
Supp "Path"               ; "C:\ProgramData\Oracle\Java\javapath"
Supp "Path"               ; "$JAVA_HOME$\bin\gleich\da"
FlushKey
siehe Logausschnitt

Code: Alles auswählen

[1] [Nov 02 13:00:06:203] [test1] ============ Version 4.11.6.8 script "p:\test1\setup.opsiscript"
...
[1] [Nov 02 13:00:06:217] [test1] MS Windows 6.1 64 Bit, Edition: PRODUCT_PROFESSIONAL_N
[1] [Nov 02 13:00:06:217] [test1] opsi service version : 4
[1] [Nov 02 13:00:06:217] [test1]
[6] [Nov 02 13:00:06:218] [test1] Registry key [HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion]  opened
[6] [Nov 02 13:00:06:219] [test1] Key closed
[6] [Nov 02 13:00:06:363] [test1] LogLevel was 6
[6] [Nov 02 13:00:06:363] [test1] LogLevel set to 7
[5] [Nov 02 13:00:06:363] [test1] Set  $Path$ = EnvVar ("Path")
[6] [Nov 02 13:00:06:370] [test1]   The value of the variable "$Path$" is now: "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\jEdit;"
[5] [Nov 02 13:00:06:371] [test1] Set  $JAVA_HOME$ = "%" + "JAVA_HOME" + "%"
[6] [Nov 02 13:00:06:371] [test1]   The value of the variable "$JAVA_HOME$" is now: "%JAVA_HOME%"
[5] [Nov 02 13:00:06:371] [test1] Set  $dummy$=GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] Path")
[7] [Nov 02 13:00:06:371] [test1] Registry started readonly
[7] [Nov 02 13:00:06:371] [test1] Registry started without redirection (64 Bit)
[6] [Nov 02 13:00:06:371] [test1] Registry key [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]  opened
[6] [Nov 02 13:00:06:372] [test1] Key closed
[6] [Nov 02 13:00:06:372] [test1]   The value of the variable "$dummy$" is now: "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\jEdit"
[5] [Nov 02 13:00:06:373] [test1]
[5] [Nov 02 13:00:06:373] [test1] Execution of Registry_Set_JAVA_HOME
[7] [Nov 02 13:00:06:373] [test1]   Registry started without redirection (64 Bit)
[7] [Nov 02 13:00:06:373] [test1]   Key is: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
[7] [Nov 02 13:00:06:373] [test1]   Key0 is: HKEY_LOCAL_MACHINE
[6] [Nov 02 13:00:06:373] [test1]   Registry key [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]  opened
[6] [Nov 02 13:00:06:374] [test1]           Variable "JAVA_HOME"  is keeping its value "C:\Program Files (x86)\Java\jre1.8.0_101"
[6] [Nov 02 13:00:06:374] [test1]           Variable "LEJOS_EV3_JAVA_HOME"  is keeping its value "%JAVA_HOME%"
[6] [Nov 02 13:00:06:375] [test1]           Variable "Path"   supplemented with "%JAVA_HOME%\bin"
[6] [Nov 02 13:00:06:375] [test1]           Variable "Path"   supplemented with "C:\ProgramData\Oracle\Java\javapath"
[6] [Nov 02 13:00:06:376] [test1]           Variable "Path"   supplemented with "%JAVA_HOME%\bin\gleich\da"
[6] [Nov 02 13:00:07:409] [test1]           Key flushed
[6] [Nov 02 13:00:07:410] [test1]           Key closed
[7] [Nov 02 13:00:07:464] [test1] Sended Message to Reload Environment
[5] [Nov 02 13:00:07:465] [test1] Set  $dummy$=GetRegistryStringValueSysnative("[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment] Path")
[7] [Nov 02 13:00:07:472] [test1] Registry started readonly
[7] [Nov 02 13:00:07:472] [test1] Registry started without redirection (64 Bit)
[6] [Nov 02 13:00:07:472] [test1] Registry key [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]  opened
[6] [Nov 02 13:00:07:473] [test1] Key closed
[6] [Nov 02 13:00:07:473] [test1]   The value of the variable "$dummy$" is now: "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\jEdit;%JAVA_HOME%\bin;C:\ProgramData\Oracle\Java\javapath;%JAVA_HOME%\bin\gleich\da"
[1] [Nov 02 13:00:07:473] [test1] ___________________
[1] [Nov 02 13:00:07:473] [test1] script finished
Gruss
Bardo Wolf


OPSICONF 2024
https://opsi.org/en/opsiconf/

opsi-Basisworkshops:

22. - 25. 04. 2024


opsi support - uib gmbh
For productive opsi installations we recommend maintainance + support contracts which are the base of opsi development.

http://www.uib.de
jnko
Beiträge: 18
Registriert: 12 Okt 2016, 09:58

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von jnko »

wolfbardo hat geschrieben:Hallo,

ohne weitere Infos Logs ist das Problem nicht wirklich nachvollziehbar.

...

Gruss
Bardo Wolf

Ok, gerne.

Wir nutzen hier als Clients Windows 10 Edu - in jeweils aktueller Fassung.

Das Winst-Logfile sagt auch bei mir, dass Supp getan hätte was es soll. Tat es aber nicht!

Zum Reproduzieren: Bitte einmal regedit.exe auf HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
und damit direkt den Inhalt des Path-Eintrages überprüfen.

Wenn weitere Infos fehlen, muss ich nur wissen was.



Des weiteren scheint bei Supp so ganz allgemein etwas im argen zu liegen.
Wenn ich nun in einem Script zwei mal hintereinander in einer Registry_ Section ein Supp Befehl aufrufe, wird der erste korrekt gesetzt, beim zweiten Aufruf aber wieder ersatzlos überschrieben. Mir scheint, dass beim Aufruf von Supp der RegKey nicht korrekt neu eingelesen und modifiziert wird, sondern noch irgendwo im Cache/Variable steht und der erste Aufruf komplett durch den zweiten ersetzt wird.

Man kann das ganze gut mit folgendem Script nachvollziehen:

Code: Alles auswählen

[Actions]
DefVar $JAVA_HOME$
DefVar $JRE_HOME$
Set $JAVA_HOME$ = "%" + "JAVA_HOME" + "%"
Set $JRE_HOME$ = "%" + "JRE_HOME" + "%"

;*** Erster Aufruf
Registry_Set_JRE_HOME_64 /SysNative
UpdateEnvironment
Pause "JRE/---"
;*****************************************************************************************************
;*** Hier nun im Regedit den Path-Key öffnen. "%JRE_HOME%\bin" wurde korrekt geschrieben.


Registry_Set_JAVA_HOME_64 /SysNative
UpdateEnvironment
Pause "---/JDK"
;*****************************************************************************************************
;*** Jetzt wieder im Regedit den Path-Key ansehen (vorher Aktualisieren nicht vergessen).
; "%JRE_HOME%\bin" wurde nun durch "%JAVA_HOME%\bin" ersetzt.

[Registry_Set_JAVA_HOME_32]
OpenKEY [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
Set "JAVA_HOME"           = "%ProgramFiles32Dir%\Java\jdk$ProductVersion$"
Supp "Path"               ; "$JAVA_HOME$\bin"
FlushKey

[Registry_Set_JAVA_HOME_64]
OpenKEY [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
Set "JAVA_HOME"           = "%ProgramFiles64Dir%\Java\jdk$ProductVersion$"
Supp "Path"               ; "$JAVA_HOME$\bin"
FlushKey
Ich sehe mir den Code von winst auch gerne selber an, habe ihn aber (mangels Zeit) noch nicht in den GIT-Repos finden können.


Schönes WE
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von n.wenselowski »

Hi,
jnko hat geschrieben: Ich sehe mir den Code von winst auch gerne selber an, habe ihn aber (mangels Zeit) noch nicht in den GIT-Repos finden können.
Zumindest dabei kann ich helfen, denn der winst ist aktuell noch im SVN zu finden.


Gruß

Niko

Code: Alles auswählen

import OPSI
jnko
Beiträge: 18
Registriert: 12 Okt 2016, 09:58

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von jnko »

jnko hat geschrieben:
Ich sehe mir den Code von winst auch gerne selber an, habe ihn aber (mangels Zeit) noch nicht in den GIT-Repos finden können.

Oh, Delphi ;-) Die TurboPascal Zeit ist ja schon ein paar Jahrzehnte bei mir vorbei, aber egal :lol:

Auf den ersten (und zweiten) Blick sieht der Code um den Supp Befehl schon korrekt aus. Der Hund muss also woanders begaben sein.

Kann sich bitte mal jemand mein Opsi-Script Beispiel mit aktiviertem Debugger ansehen? Ich habe (leider) kein Delphi hier...
(Wem gehört der Laden denn momentan? Diese ganze Eigentümer- und Namenswechsel im laufer der Zeit...)

Code: Alles auswählen

[Actions]
DefVar $JAVA_HOME$
DefVar $JRE_HOME$
Set $JAVA_HOME$ = "%" + "JAVA_HOME" + "%"
Set $JRE_HOME$ = "%" + "JRE_HOME" + "%"

;*** Erster Aufruf
Registry_Set_JRE_HOME_64 /SysNative
UpdateEnvironment
Pause "JRE/---"
;*****************************************************************************************************
;*** Hier nun die MessageBox stehenlassen und im Regedit den Path-Key öffnen. "%JRE_HOME%\bin" wurde korrekt geschrieben.


Registry_Set_JAVA_HOME_64 /SysNative
UpdateEnvironment
Pause "---/JDK"
;*****************************************************************************************************
;*** Jetzt wieder im Regedit den Path-Key ansehen (vorher Aktualisieren nicht vergessen).
; "%JRE_HOME%\bin" wurde nun durch "%JAVA_HOME%\bin" ersetzt anstatt angefügt.

[Registry_Set_JAVA_HOME_32]
OpenKEY [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
Set "JAVA_HOME"           = "%ProgramFiles32Dir%\Java\jdk$ProductVersion$"
Supp "Path"               ; "$JAVA_HOME$\bin"
FlushKey

[Registry_Set_JAVA_HOME_64]
OpenKEY [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
Set "JAVA_HOME"           = "%ProgramFiles64Dir%\Java\jdk$ProductVersion$"
Supp "Path"               ; "$JAVA_HOME$\bin"
FlushKey
Benutzeravatar
ueluekmen
uib-Team
Beiträge: 1939
Registriert: 28 Mai 2008, 10:53

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von ueluekmen »

Hi,

ich habe das jetzt nicht überprüft, aber das Handbuch sagt an der Stelle:

Nach dem Patchen des Registry-Path enthält die Umgebungsvariable Path den veränderten Wert erst nach einem Reboot.

Ansonsten weiß ich auch nicht, ob der mit den vielen Leerzeichen klarkommt, aber es kann auch sein, dass es nicht daran liegt.
opsi support - uib gmbh
For productive opsi installations we recommend support contracts.
http://www.uib.de
jnko
Beiträge: 18
Registriert: 12 Okt 2016, 09:58

Re: [BUG?] Supp funktioniert nicht richtig

Beitrag von jnko »

ueluekmen hat geschrieben:Hi,
Nach dem Patchen des Registry-Path enthält die Umgebungsvariable Path den veränderten Wert erst nach einem Reboot.
Nein, das hat mit einem Reboot absolut nichts zu tun. Die Aussage mit der Path-Variable ist zwar korrekt, aber aber auch nach einem Reboot stimmt diese nicht.
Wie ich schon schrieb, lässt sich ja direkt in der Registry beobachten, dass Path beim ersten Aufruf von Supp direkt in der Registry korrekt geschrieben wird, beim zweiten Aufruf wird der beim ersten Aufruf geschriebene Wert komplett mit dem des zweiten überschrieben.
Antworten