opsiinc mit weiteren Sub Sektionen

Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

opsiinc mit weiteren Sub Sektionen

Beitrag von tobias »

Hi,

ist es möglich innerhalb einer include datei weitere sub-sektionen einzubauen.
Mir ist nämlich grade aufgefallen das er weitere sektionen in der include datei nicht findet:
[5] [04.10.2012 13:42:38] Warning: The section "sub_checkfunktion" (called in line 70 of the calling section) does not exist or is empty

Code: Alles auswählen

....
....
....
for %s% in $option_SearchProcess$ do sub_checkfunktion

[sub_checkfunktion]

set $func_currentchecktask$ = "%s%"
set $func_tasklist$ = getOutStreamFromSection('DosInAnIcon_checkprocess')
;set $process$ = splitString(takeString(1,$currentchecktask$), ",")
set $func_processVAR$ = unquote(takeString(1,$func_tasklist$), '"')

....
....
Benutzeravatar
Thomas_H
Beiträge: 525
Registriert: 09 Jun 2010, 11:57
Wohnort: Havelland

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von Thomas_H »

Moinsens,

schau Dir mal verschiedene Beispiele in der Wiki an. Dort wird bei einigen bei der Deinstallation von Software eine delsub.ins aufgerufen, in welcher sich dann weitere Sub-Sektionen befinden. In sofern ist Deine Frage mit "Ja" zu beantworten.

Klingt jetzt etwas hilflos naiv, aber nimm mal die Leerzeile zwischen

[sub_checkfunktion]

und

set $func_currentchecktask$ = "%s%"

'raus...

Gruß

Thomas_H
Kennst Du schon die WIKI für OPSI-Scripte? Fertige Installationsscripte bekommen und ablegen unter OPSI-Wiki
Aus dem Glashaus :) : UIB bietet auch Schulungen und Supportverträge für Opsi an.
Bild
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von tobias »

naja was da auffällt ist, das innerhalb einer include datei auch in den beispielen nie mehr als 1 sektion vorhanden ist.
Es werden zwar Sektionen angegeben, die sind aber außerhalb der Include datei also vermutlich im Hauptscript.

Bisschen doof denn ich bin bei einer for schleife doch auf eine sub_sektion angewiesen. Wenn das tatsächlich nicht ginge könnte ich in include dateien keine iteration von Stringlisten durchführen.

[edit:]
ich glaube ich verstehe wo das problem ist:
include fügt ja einfach nur den text aus der datei in das laufende script ein. Mein script würde demnach ja so aussehen:


Code: Alles auswählen


[ACTIONS]

;Show Error Message
set $option_userfail$ = "Es wurden laufende Programme gefunden, ich probiere es spaeter erneut !"
; ----------------------------------------------------------------
;-------------------------------------------------------------------------------
;				CheckTask Operations		     
;-------------------------------------------------------------------------------
	pause $message$
	

DefStringList $func_tasklist$
DefStringList $func_process$


;------------------- DefVar-ENDE---------------------------------------------------


for %s% in $option_SearchProcess$ do sub_checkfunktion

[sub_checkfunktion]
set $func_currentchecktask$ = "%s%"
set $func_tasklist$ = getOutStreamFromSection('DosInAnIcon_checkprocess')
;set $process$ = splitString(takeString(1,$currentchecktask$), ",")
set $func_processVAR$ = unquote(takeString(1,$func_tasklist$), '"')

	
;-------------------------------------------------------------------------------
;				CheckTask end
;-------------------------------------------------------------------------------

if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
	LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
	isFatalError
	; Stop process and set installation status to failed

Ich hätte also eine Subsektion innerhalb der noch laufenden ACTIONS sektion aus dem haupt Script. Oder habe ich da einen Denkfehler?
Eine Include ist ja keine eigene sektion sondern erweitert nur die laufende Sektion oder hängt ans ende des laufenden Scripts weitere Sektionen an.
Benutzeravatar
Thomas_H
Beiträge: 525
Registriert: 09 Jun 2010, 11:57
Wohnort: Havelland

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von Thomas_H »

Moinsens,
tobias hat geschrieben: Wenn das tatsächlich nicht ginge könnte ich in include dateien keine iteration von Stringlisten durchführen.
Geht aber. Schau mal beispielsweise hier. Da wird im delsub.ins auch nach verschiedenen Win-Versionen abgearbeitet und anschließend zum uninstall.ins zurückgekehrt.
tobias hat geschrieben: Ich hätte also eine Subsektion innerhalb der noch laufenden ACTIONS sektion aus dem haupt Script. Oder habe ich da einen Denkfehler?
Eine Include ist ja keine eigene sektion sondern erweitert nur die laufende Sektion oder hängt ans ende des laufenden Scripts weitere Sektionen an.

Naja, Sub ist eigentlich eine Programmverzweigung. Der gerade Weg eines Scriptes wäre die Abarbeitung von Zeile 1 bis zum EOF. Ein Sub ist quasi eine "Weiche", welches ab der Sub-Zeile zu einer anderen Datei mit weiteren, anderen Anweisungen abzweigt. Hier erfolgt die weitere Abarbeitung des Scriptes unter bestimmten Bedingungen, nach dem EOF der anderen Datei folgt wieder eine Weiche zum alten Script, welches dann bis zum EOF abgearbeitet wird.

Gruß

Thomas_H
Kennst Du schon die WIKI für OPSI-Scripte? Fertige Installationsscripte bekommen und ablegen unter OPSI-Wiki
Aus dem Glashaus :) : UIB bietet auch Schulungen und Supportverträge für Opsi an.
Bild
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von tobias »

stimmt bei der delsub im opsi-template ist das ja nix anderes eigentlich. Vieleicht liegt genau hier der unterschied zwischen einer sub und einer include ;)

Ich probier das mal mit einem kleineren Script nachher nochmal und vergleiche mit einer sub
Benutzeravatar
Thomas_H
Beiträge: 525
Registriert: 09 Jun 2010, 11:57
Wohnort: Havelland

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von Thomas_H »

Moinsens,

ich hab mir mal erlaubt, für unsere unerfahrenen opsi-Nutzer und Nichtprogrammierer das in einer Grafik zusammenzufassen. Für die Erfahrenen unter uns eher was zum schmunzeln...

Bild

Gruß

Thomas_H
Kennst Du schon die WIKI für OPSI-Scripte? Fertige Installationsscripte bekommen und ablegen unter OPSI-Wiki
Aus dem Glashaus :) : UIB bietet auch Schulungen und Supportverträge für Opsi an.
Bild
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von tobias »

hier gehts aber um eine include ;)

Include ist keine 2. routine
Fügt den Inhalt von <file name> nach der aktuellen Zeile im laufenden Script ein. Somit ist die erste Zeile der
eingefügten Datei die nächste Zeile welche der opsi-winst interpretiert.
Wenn ich einfach eine weitere Sektion in einer include datei habe zerstöre ich quasi den scriptablauf an dieser stelle - sofern der Aufruf mitten in einer Sektion aufgerufen wird ! Ich erweitere also diese Sektion an der Stelle kann auch sektionen aufrufen - diese dürfen sich aber nicht in der selben Include datei befinden.

Eine Sub_Sektion wird ja nicht an dieser Codestelle eingefügt sondern arbeitet als externes Script. Also beginnt bei Zeile eins während das Include die laufende Sektion erweitert.
Benutzeravatar
Thomas_H
Beiträge: 525
Registriert: 09 Jun 2010, 11:57
Wohnort: Havelland

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von Thomas_H »

Moinsens,

nö, sehe ich erstmal nicht so. Ich hab's noch nicht probiert, denke aber dass es sich ähnlich wie eine Subroutine verhält, nur dass eben die includete Datei wie ein fortlaufender Ablauf bewertet wird und auf die das laufende Programm ggf. zurückgreifen darf, wenn der Programmierer das vorsieht. Ein Include nehme ich doch dann vor, wenn ich eine ständig auf's Neue wiederkehrende Geschichte habe, wie beispielsweise Deklarationen oder ein Errorhandling, was das Programm dann wie sein eigen behandeln soll.

Was aber die opsi-scripte angeht, wo findest Du hier ein include? Ich hab lediglich den Aufruf includelog gefunden nicht aber include <datei>.

Gruß

Thomas_H
Kennst Du schon die WIKI für OPSI-Scripte? Fertige Installationsscripte bekommen und ablegen unter OPSI-Wiki
Aus dem Glashaus :) : UIB bietet auch Schulungen und Supportverträge für Opsi an.
Bild
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von tobias »

Thomas_H hat geschrieben:Moinsens,

nö, sehe ich erstmal nicht so. Ich hab's noch nicht probiert, denke aber dass es sich ähnlich wie eine Subroutine verhält, nur dass eben die includete Datei wie ein fortlaufender Ablauf bewertet wird und auf die das laufende Programm ggf. zurückgreifen darf, wenn der Programmierer das vorsieht. Ein Include nehme ich doch dann vor, wenn ich eine ständig auf's Neue wiederkehrende Geschichte habe, wie beispielsweise Deklarationen oder ein Errorhandling, was das Programm dann wie sein eigen behandeln soll.
jop das script bearbeitet es wie sein eigenes. Es funktioniert so als wenn ich 2 scripte habe und aus Script B den inhalt einfach in A kopiere.
Dabei habe ich die Wahl kopiere ich es irgendwo an eine definierte Stelle in Script A oder hänge ich es ganz unten an.

Nun passiert aber folgendes:
Ich habe in Script B meine normalen ACTIONS befehle aber auch eine SUB_Sektion oder von mir aus auch eine WinBatch. Diese würde sich nun in Script A einfach mitten in der ACTIONS Sektion befinden. Das kann gar nicht funktionieren....

Bei Subsektionen fängt der Scriptablauf von vorne an. Es gibt eine eigene Actions_sektion und alleine durch diese Tatsache habe ich die Möglichkeit auch neue Sektionen zu eröffnen.

Include => Script wird weiter linear ausgeführt
Sub => Script springt entweder in andere Datei oder wie bei jeder anderen sektion auch zu einer anderen zeile im script
Was aber die opsi-scripte angeht, wo findest Du hier ein include? Ich hab lediglich den Aufruf includelog gefunden nicht aber include <datei>.

Gruß
Thomas_H
Was meinst du genau? Alles was ich über Include weiß hab ich von hier:
http://download.uib.de/opsi4.0/testing/ ... tes-de.pdf
Benutzeravatar
tobias
Beiträge: 1294
Registriert: 20 Aug 2008, 12:36
Wohnort: Braunschweig
Kontaktdaten:

Re: opsiinc mit weiteren Sub Sektionen

Beitrag von tobias »

so hab mal ein beispiel gemacht:

Master.INS

Code: Alles auswählen

[actions]
comment = " Das ist der Beginn des Hauptscriptes"
include_insert "%scriptpath%\include.opsiinc"
comment = "Das kommt nach dem Include"
include.opsiinc

Code: Alles auswählen

comment = "Das ist der beginn des Includefiles"
sub_unterroutine
DosInAnIcon_pause

[sub_unterroutine]
comment ="Dies ist die Unterroutine im OPSIINC"

[DosInAnIcon_pause]
pause
WINST interpretiert das als:

Code: Alles auswählen

[actions]
comment = " Das ist der Beginn des Hauptscriptes"
comment = "Das ist der beginn des Includefiles"
sub_unterroutine
DosInAnIcon_pause

[sub_unterroutine]
comment ="Dies ist die Unterroutine im OPSIINC"

[DosInAnIcon_pause]
pause

comment = "Das kommt nach dem Include"

Das kann nicht funktionieren ...
Antworten