Seite 1 von 1

DosInAnIcon aus Sub-Skript aufrufen klappt nicht mehr

Verfasst: 11 Jan 2017, 13:28
von Genius2
Hallo,

ich habe ein Problem, seit wir von dem opsi-client-agent 4.0.6 auf 4.0.7 upgedatet haben, funktioniert ein Skript nicht mehr korrekt.
Es handelt sich um ein Skript, um der Gruppe "Benutzer" Vollzugriff auf einen installieren Matlab-Ordner zu geben.

Im Hauptskript wird dazu folgendes Sub-Skript aufgerufen:

Code: Alles auswählen

;################### Grant_RW_Permissions  ####################
  if not (GetProductProperty("grant_rw_permissions","skip") = "skip")
    Message "Change Permissions"
    sub "%ScriptPath%\skripte\grant_rw_permissions.ins"
  endif
Im Sub-Skript wird nun ermittelt, wo sich die Matlab Version befindet, welche Sprache icacls benutzt und dann wird der Gruppe "Benutzer" Bzw. "User" Vollzugriff auf den Ordner gegeben.

Code: Alles auswählen

; ###########################################################################
; ###########################################################################
;Dieses Skript muss im Regelfall nicht bearbeitet werden, wenn die gegebene  
;Syntax der product properties im control file ueberall eingehalten wird.


; ###########################################################################
set $productproperty$ = GetProductProperty("grant_rw_permissions","skip")
set $workingkey$ = "HKEY_LOCAL_MACHINE\SOFTWARE\MathWorks\MATLAB"
set $INST_Resultlist$ = getFileInfoMap("C:\Windows\System32\icacls.exe")
set $icacls_lang$ = getValue("Language name 0", $INST_Resultlist$)

;welche icacls Sprache wird verwendet?
if (contains($icacls_lang$, "Deutsch"))
  set $icacls_lang$ = "de"
endif
if (contains($icacls_lang$, "English"))
  set $icacls_lang$ = "en"
endif

;Wenn fuer eine bestimme Matlab Version die Berechtigungen geaendert werden
;sollen
if not (($productproperty$ = "all") OR ($productproperty$ = "skip"))
  set $split_product$=takeString(0, splitString ($productproperty$, "_"))
  set $split_version$=takeString(1, splitString ($productproperty$, "_"))
  if ($split_product$ = "matlab")
    set $pathtomatlab_32bit$ = getRegistryKeyList32($workingkey$)
    set $pathtomatlab_64bit$ = getRegistryKeyList64($workingkey$)
    
    for %nr% in $pathtomatlab_32bit$ do sub_check_installed_specific_32bit
    for %nr% in $pathtomatlab_64bit$ do sub_check_installed_specific_64bit
  endif
endif

;Wenn fuer alle installierten Matlab Versionen die Brechtigungen geaendet
;werden sollen
if ($productproperty$ = "all")
    set $pathtomatlab_32bit$ = getRegistryKeyList32($workingkey$)
    set $pathtomatlab_64bit$ = getRegistryKeyList64($workingkey$)

    for %nr% in $pathtomatlab_32bit$ do sub_check_installed_all_32bit
    for %nr% in $pathtomatlab_64bit$ do sub_check_installed_all_64bit
endif

[sub_check_installed_specific_32bit]
set $matlabroot$ = GetRegistryStringValue32 ("[" + $workingkey$ + "\" + "%nr%" + "] MATLABROOT")
if contains($matlabroot$, $split_version$)
  comment "Matlabroot der gesuchten Version gefunden"
  Message="Granting permission to folder for User: User"
  Sub_check_icacls_lang_and_change_permission
endif


[sub_check_installed_specific_64bit]
set $matlabroot$ = GetRegistryStringValue64 ("[" + $workingkey$ + "\" + "%nr%" + "] MATLABROOT")
if contains($matlabroot$, $split_version$)
  comment "Matlabroot der gesuchten Version gefunden"
  Message="Granting permission to folder for User: User"
  Sub_check_icacls_lang_and_change_permission
endif

[sub_check_installed_all_32bit]
set $matlabroot$ = GetRegistryStringValue32 ("[" + $workingkey$ + "\" + "%nr%" + "] MATLABROOT")
  comment "Matlabroot der gesuchten Version gefunden"
  Message="Granting permission to folder for User: User"
  Sub_check_icacls_lang_and_change_permission

[sub_check_installed_all_64bit]
set $matlabroot$ = GetRegistryStringValue64 ("[" + $workingkey$ + "\" + "%nr%" + "] MATLABROOT")
  comment "Matlabroot der gesuchten Version gefunden"
  Message="Granting permission to folder for User: User"
  Sub_check_icacls_lang_and_change_permission


; ###########################################################################
; ###########################################################################
; ###########################################################################
;Ab hier funktioniert das Skript nicht wie es soll.

[Sub_check_icacls_lang_and_change_permission]
if ($icacls_lang$ = "de")
  DosInAnIcon_grant_permission_de
endif

if ($icacls_lang$ = "en")
  DosInAnIcon_grant_permission_en
endif
 

[DosInAnIcon_grant_permission_de]
icacls "$matlabroot$" /grant "Benutzer":(OI)(CI)(F)

[DosInAnIcon_grant_permission_en]
icacls "$matlabroot$" /grant "User":(OI)(CI)(F)
Das Skript läuft soweit auch durch, findet im unteren Teil des Skripts weder die DosInAnIcon_grant_permission_de noch die DosInAnIcon_grant_permission_en Sektion.

In der Log findet sich folgendes dazu:

Code: Alles auswählen

(361)     [6] [Jan 11 12:45:07:329] [matlab]         ~~~~~~~ Start Sub ~~~~~~~  Sub_check_icacls_lang_and_change_permission
(362)     [6] [Jan 11 12:45:07:330] [matlab]         If
(363)     [9] [Jan 11 12:45:07:330] [matlab]           EvaluateBoolean: Parsing: ($icacls_lang$ = "de") 
(364)     [9] [Jan 11 12:45:07:330] [matlab]           EvaluateBoolean: Parsing: $icacls_lang$ = "de") 
(365)     [5] [Jan 11 12:45:07:330] [matlab]           $icacls_lang$ = "de"   <<< result true
(366)     [5] [Jan 11 12:45:07:330] [matlab]           ($icacls_lang$ = "de")   <<< result true
(367)     [6] [Jan 11 12:45:07:330] [matlab]         Then
(368)     [9] [Jan 11 12:45:07:330] [matlab]           Looking for section: DosInAnIcon_grant_permission_de in standard section.
(369)     [9] [Jan 11 12:45:07:330] [matlab]           Looking for section: DosInAnIcon_grant_permission_de in calling section.
(370)     [9] [Jan 11 12:45:07:330] [matlab]           Looking for section: DosInAnIcon_grant_permission_de in global section.
(371)     [4] [Jan 11 12:45:07:330] [matlab]           Warning: The section "DosInAnIcon_grant_permission_de" (called in line 2 of the calling section) does not exist or is empty
(372)     [6] [Jan 11 12:45:07:330] [matlab]         EndIf
(373)     [6] [Jan 11 12:45:07:330] [matlab]         If
(374)     [9] [Jan 11 12:45:07:330] [matlab]           EvaluateBoolean: Parsing: ($icacls_lang$ = "en") 
(375)     [9] [Jan 11 12:45:07:330] [matlab]           EvaluateBoolean: Parsing: $icacls_lang$ = "en") 
(376)     [5] [Jan 11 12:45:07:331] [matlab]           $icacls_lang$ = "en"   <<< result false
(377)     [5] [Jan 11 12:45:07:331] [matlab]           ($icacls_lang$ = "en")   <<< result false
(378)     [6] [Jan 11 12:45:07:331] [matlab]         Then
(379)     [6] [Jan 11 12:45:07:331] [matlab]         EndIf
(380)     [6] [Jan 11 12:45:07:331] [matlab]         
(381)     [6] [Jan 11 12:45:07:331] [matlab]         ~~~~~~~ End Sub   ~~~~~~~  Sub_check_icacls_lang_and_change_permission
(382)     [6] [Jan 11 12:45:07:331] [matlab]         
(383)     [6] [Jan 11 12:45:07:331] [matlab]       EndIf
(384)     [6] [Jan 11 12:45:07:331] [matlab]         
(385)     [6] [Jan 11 12:45:07:331] [matlab]         ~~~~~~~ End Sub   ~~~~~~~  sub_check_installed_specific_64bit
(386)     [6] [Jan 11 12:45:07:331] [matlab]         
(387)     [6] [Jan 11 12:45:07:331] [matlab]       
(388)     [6] [Jan 11 12:45:07:331] [matlab]       ~~~~~~ End Loop
(389)     [6] [Jan 11 12:45:07:331] [matlab]     EndIf
(390)     [6] [Jan 11 12:45:07:331] [matlab]   EndIf
Hat wer eine Idee? Kann man seit der neuen Winst-Version keine DosInAnIcon Sektion mehr aus einer Sub-Sektion aus einem Sub-Skript aufrufen?

Danke und viele Grüße
Patrick

Re: DosInAnIcon aus Sub-Skript aufrufen klappt nicht mehr

Verfasst: 11 Jan 2017, 13:45
von andré
Nur ins blaue reingeraten:

Die DosInAnIcon_grant_permission_de ist wahrscheinlich nur im Subskript enthalten, richtig? Evtl reicht es schon, wenn du die zusätzlich auch im Hauptskript aufführst.

Re: DosInAnIcon aus Sub-Skript aufrufen klappt nicht mehr

Verfasst: 11 Jan 2017, 14:16
von Genius2
andré hat geschrieben:Nur ins blaue reingeraten:

Die DosInAnIcon_grant_permission_de ist wahrscheinlich nur im Subskript enthalten, richtig? Evtl reicht es schon, wenn du die zusätzlich auch im Hauptskript aufführst.
Ja, damit klappt es. Aber es muss ja einen Grund geben, warum es im Subskript selbst nicht mehr aufrufbar ist.
Früher hat es geklappt.

Re: DosInAnIcon aus Sub-Skript aufrufen klappt nicht mehr

Verfasst: 11 Jan 2017, 14:39
von andré
Ich sage mal so: Kann ich nicht nachvollziehen, weil ich das Problem schon immer hatte. Wenn ein subskript aufgerufen wurde, hatte ich immer irgendwelche Probleme, wenn ich die einzelnen Ausführungsbereiche nur in einem Skript hatte, daher stellte sich mir diese Frage gar nicht.