Ini Datei einlesen und alle Zeilen einzeln abarbeiten

LarsJasch_CC
Beiträge: 27
Registriert: 11. Sep 2012, 13:29
Kontaktdaten:

Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von LarsJasch_CC » 08. Nov 2013, 14:40

Hallo Zusammen,

da ich hier im Forum nicht so richtig fündig werde oder ich es vielleicht auch nicht ganz kapiere :lol:

möchte ich euch hiermit um Hilfe bitten.

Es geht darum eine "Software.ini" Datei einzulesen über die Setup.inf Routine. pro Zeile steht immer ein Paketname.

Beispiel:
Adobe_Reader
Firefox
InternetExplorer

Nun will ich in der Registry alle Unterschlüssel welche sich unter HKLM\Software\CC\<<ALLE PAKETNAMEN AUS DER INI>> löschen. :cry:

Zuvor mache ich auch eine Abfrage ob es die ini überhaupt gibt. Wenn ja dann führe einen Ping aus und schreibe ein Logfile das ini vorhandn ist. Wenn nein dann schreibe ein Log File das keine ini vorhanden ist und führe keinen Ping aus. Das Funktioniert schon mal :mrgreen:

Die Ini wird auch korrekt eingelesen, zumindest lasse ich mir als Test ein ECHO ausgeben zum Inhalt der ini. Auch das klappt :mrgreen:

Wie stelle ich es nun an das jede Zeile der ini ausgelesen wird und weiter übergeben wird an den RegDelete Befehl :roll:

Viele Grü0ß und besten Dank schon mal im Voraus

Benutzeravatar
Hendrik_Ambrosius
Moderator
Moderator
Beiträge: 7409
Registriert: 13. Dez 2004, 23:10
Wohnort: Adendorf/Lüneburg

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von Hendrik_Ambrosius » 08. Nov 2013, 14:49

Am schwierigsten ist hier das Auslesen der reinen ASCII-Datei.
Eventuell geht das per ReadTextFile und dann mit Tokenize, bin mir aber nicht sicher.
Könnte man nicht eine INI- oder XML-Datei als Basis nehmen?

Der Rest ist recht einfach:
FOR-NEXT-Schleife um durch die Werte durchzugehen, Aufruf der jeweiligen Sektionen ggf. mit "#!" statt "#" damit sie auch mehrfach angesprungen werden.
Hendrik Ambrosius / Senior Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 AG | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 AG or of the support team.

Benutzeravatar
r.wiegel
Beiträge: 833
Registriert: 05. Feb 2010, 13:45
Wohnort: Regensburg
Kontaktdaten:

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von r.wiegel » 08. Nov 2013, 15:40

Wie ist die Software.ini genau aufgebaut? Wie wird die erstellt? Ist die Anzahl der Datensätze bekannt?
Viele Grüße
Roman Wiegel
IT-Consultant

MR Datentechnik - Vertriebs- und Service GmbH
Client Management

LarsJasch_CC
Beiträge: 27
Registriert: 11. Sep 2012, 13:29
Kontaktdaten:

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von LarsJasch_CC » 08. Nov 2013, 16:02

Anbei die Setup.inf

[SetupInfo]
Author =test
CreationDate =01/10/2013 10:27:34
InventoryID =
Description =
Method =install.cmd ALWAYS CACHE !
Tested on =
Dependencies =
Command line options = /S0
Last Change =01/10/2013 10:27:34
Build =0

[VarDefInfo]

[Setup]
Version=10.5
ShowCaption=1
BlockInput=0
Platform=*

[Requirements]

[Application]
ProductName=TEST
ProductNameShort=TEST
Version=1.0
Revision=0
DeveloperName=CC


SetupName=%ProductName%

UserKeyName=%DeveloperName%\%ProductName%
MachineKeyName=%DeveloperName%\%ProductName%\%Version%

UninstallKeyName=%DeveloperName% %ProductName% %Version%
UninstallDisplayName=[EMPIRUM] %ProductName%
UninstallDisplayIcon=C:\EmpirumAgent\User\Agent.ico
UninstallString=%ReinstallString% /U
ReinstallString="%CommonSetupDir%\Setup.exe" "%SRC%\%SetupInfDir%\Setup.inf"
ReinstallMode=0
HideUninstall=0

SrcDir=..
ApplicationDir=%ProgramFilesDir%\%ProductName%
SetupInfDir=Install
DataDir=%Personal%
Prompts=
AskUninstallOld=0
ShellLinks=1
CommonShellLinks=1
CreateUnresolvableShellLinks=1

UseStringSection=Strings:09
UseSysStringSection=SysStrings:09

DateWarning=0
SizeWarning=0
Reboot=2
PreventExternalReboot=1
StartServicesOnReboot=0
CallTimeOut=3600
AbortAfterCallTimeOut=1
DisableCancelButton=1
ShowEndMessage=0



[Strings:07]
Disk1=Installationsmedium 1
EndMessageDesc=Die Installation wurde erfolgreich abgeschlossen!
ErrorLogMessage=Die Installation/Deinstallation wurde mit einer Fehlermeldung abgebrochen!
InstallationFor=Installation f?r:
InstallerDesc=Dienstprogramm zum Installieren einzelner Komponenten.
InstallerName=Installationsprogramm
SetupWizard=Installations-Assistent
Uninstallation=deinstallieren

[Strings:09]
Disk1=Installation media 1
EndMessageDesc=Installation was completed successfully!
ErrorLogMessage=The installation/uninstallation aborted with an error message!
InstallationFor=Installation for:
InstallerDesc=Service program to install single components.
InstallerName=Setup program
SetupWizard=Installation Wizard
Uninstallation=Uninstallation

[SysStrings:07]
Users=Benutzer

[SysStrings:09]
Users=Users

[Environment]
CommonSetupDir=%CommonFilesDir%\Setup%SetupBits%
V_MachineValuesPath=\\%EmpirumServer%\Values$\MachineValues\%DomainName%
V_UserValuesPath=%HKLM,"Software\matrix42\Software Depot","HomeServer"%\Values$\UserValues\%UserDomain%


[Prompts]

[Services]

[Processes]

[EventSources]

[Encryption]

[Disks]
1=%Disk1%

[Options]
Installer = %InstallerName%, COPYALWAYS, Installer, "%InstallerDesc%"
Product = %ProductName%, COPYALWAYS, Product, "%ProductDesc%"

[Installer]
1:..\..\..\..\User\Setup.exe, %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:..\..\..\..\User\SetupDeu.chm, %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:..\..\..\..\User\SetupEnu.chm, %CommonSetupDir%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP, 0
1:..\..\..\..\User\Mx42SynSem.dll, %System%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP WINDOWS32, 0
1:..\..\..\..\User\x64\Mx42SynSem.dll, %System%, OPTIONAL USEFILENAME DIRECTORY NOSIZEWARNING SETUP WINDOWS64, 0
1:%SetupInfDir%\Setup.inf, , NORMAL, 0
1:%Temp%\Setup64.exe, %CommonSetupDir%\Setup.exe, OPTIONAL NOSIZEWARNING SETUP ALWAYS WINDOWS64, 0




[Product]
#Set:Product, DONTDELETE
#Set:Remove, DELETE



[Set:Product]
; 1. Überprüfen ob "SW-Packages-old.ini" in Paketverzeichnis liegt und Installation starten
Set SWIniFile=[SW-Packages-old.ini]
Set SWIniPath=c:\EmpirumAgent\Packages\CC\%ProductName%\%SWIniFile%
Set ReadSWIni=C:\EmpirumAgent\Packages\CC\%Productname%\SW-Packages-old.ini
If DoesFileExist ("C:\EmpirumAgent\Packages\CC\%Productname%\SW-Packages-old.ini") == "1" Then "Product-Install" Else "NoSWPackagesOldIniFound" EndIf


[Product-Install]
; Da ini vorhanden ist, die Installation starten und alte Paketvorgänger RegKeys aus Variable "IniContent" löschen
Callhidden cmd /c Echo %SysDate% %SysTime% - %SWIniPath% was found and old Package Registry Keys can be deleted! > C:\temp\%ProductName%_%SWIniFile%_FOUND.log
set IniContent=ReadTextFile ("%ReadSWIni%")
Callhidden cmd /c Echo %SysDate% %SysTime% - Packages was been found in %SWIniFile% ! >> C:\temp\%ProductName%_%SWIniFile%_FOUND.log
<<<<<<<HIER MUSS DER AUFRUF REIN FÜR DIE INI ABARBEITUNG>>>>
CallHidden cmd /c "%SRC%\Ping2.cmd"
If %ErrorLevel% <> "0" Then "CheckForReboot" EndIf


[NoSWPackagesOldIniFound]
; Wenn ini nicht vorhanden ist dann Error Log schreiben und Installation trotzdem starten
CallHidden cmd /c "%SRC%\Ping3.cmd"
Callhidden cmd /c Echo %SysDate%--%SysTime% - %SWIniPath% not found and old Package Registry Keys can not be deleted! > C:\temp\%ProductName%_%SWIniFile%_NOT-FOUND.log
If %ErrorLevel% <> "0" Then "CheckForReboot" EndIf



[Set:Remove]
If %ErrorLevel% <> "0" Then "CheckForReboot" EndIf
-CallHidden cmd /c "%SRC%\uninstall.cmd"




[CheckForReboot]
If %ErrorLevel% == "3010" Then "RebootRequired" Else "SetupError" EndIf

[RebootRequired]
SetReboot 1
-SetReboot 1

[SetupError]
ErrorLogMsg %ErrorText% %ErrorLevel% %CallingText%
Abort %ErrorText% %ErrorLevel% %CallingText%
-Abort %ErrorText% %ErrorLevel% %CallingText%
-ErrorLogMsg %ErrorText% %ErrorLevel% %CallingText%

LarsJasch_CC
Beiträge: 27
Registriert: 11. Sep 2012, 13:29
Kontaktdaten:

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von LarsJasch_CC » 08. Nov 2013, 16:04

r.wiegel hat geschrieben:Wie ist die Software.ini genau aufgebaut? Wie wird die erstellt? Ist die Anzahl der Datensätze bekannt?
Die Ini Datei kann verschiedene Anzahl an Zeilen haben. Wird aber mit ziemlicher Sicherheit nicht mehr wie min. 10 bis max. 20 Zeilen haben 8)

Viele Grüße und danke schon mal an alle für das schnelle Feedback

LarsJasch_CC
Beiträge: 27
Registriert: 11. Sep 2012, 13:29
Kontaktdaten:

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von LarsJasch_CC » 08. Nov 2013, 16:07

Hendrik_Ambrosius hat geschrieben:Am schwierigsten ist hier das Auslesen der reinen ASCII-Datei.
Eventuell geht das per ReadTextFile und dann mit Tokenize, bin mir aber nicht sicher.
Könnte man nicht eine INI- oder XML-Datei als Basis nehmen?

Der Rest ist recht einfach:
FOR-NEXT-Schleife um durch die Werte durchzugehen, Aufruf der jeweiligen Sektionen ggf. mit "#!" statt "#" damit sie auch mehrfach angesprungen werden.
Hallo Herr Ambrosius :-)

ReadTextFile ist bereits schon in Verwendung. Wo es aktuell habert ist einfach nur, dass jede Zeile einzeln abgearbeitet wird aus der Ini.
Hintergrund dazu: Pro Zeile steht ein Paketnamen, welcher wiederum genauso in der Registry aufzufinden ist unter HKLM\Software\CC\<<PAKETNAME>>.

Viele Grüße :mrgreen:

Benutzeravatar
Hendrik_Ambrosius
Moderator
Moderator
Beiträge: 7409
Registriert: 13. Dez 2004, 23:10
Wohnort: Adendorf/Lüneburg

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von Hendrik_Ambrosius » 08. Nov 2013, 16:16

Dafür wie geschrieben eine FOR-NEXT-Schleife verwenden.
Hendrik Ambrosius / Senior Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 AG | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 AG or of the support team.

LarsJasch_CC
Beiträge: 27
Registriert: 11. Sep 2012, 13:29
Kontaktdaten:

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von LarsJasch_CC » 08. Nov 2013, 18:26

Hendrik_Ambrosius hat geschrieben:Dafür wie geschrieben eine FOR-NEXT-Schleife verwenden.
Hätten Sie auch ein Beispiel für mich ? ;)

Benutzeravatar
Hendrik_Ambrosius
Moderator
Moderator
Beiträge: 7409
Registriert: 13. Dez 2004, 23:10
Wohnort: Adendorf/Lüneburg

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von Hendrik_Ambrosius » 08. Nov 2013, 18:55

Klar, habe einfach mal das aus der Anleitung genommen:

For <Var>,<LB>,<UB>,<Inc>,<Abschnitt>
Führt eine FOR-Schleife aus. Die Zählvariable ist <Var> wird von der Untergrenze <LB> zur Obergrenze <UB> in <Inc> Schritten hoch gezählt. Jedes Mal wird der Abschnitt <Abschnitt> aufgerufen. Die Zahlen dürfen auch negativ sein sowie Ober- und Untergrenze vertauscht werden (Abwärtsschleife). Wird <Inc> leer gelassen, wird 1 bzw. -1 angenommen.

Beispiel: For Counter,1,3,,UpSection
Hendrik Ambrosius / Senior Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 AG | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 AG or of the support team.

Benutzeravatar
Hendrik_Ambrosius
Moderator
Moderator
Beiträge: 7409
Registriert: 13. Dez 2004, 23:10
Wohnort: Adendorf/Lüneburg

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von Hendrik_Ambrosius » 08. Nov 2013, 19:03

...oder auch z.B. in der setup.inf der Empirum Management Console:

FOR Counter,1,%NumberOfTokens%,1,CopyCreateConsoleExtensionResFiles
...

[CopyCreateConsoleExtensionResFiles]
Set ResLang = %%EmpResLanguages%Counter%%
ReplaceEnv ResLang
;Echo Language %Counter%: %ResLang%
...
Hendrik Ambrosius / Senior Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 AG | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 AG or of the support team.

LarsJasch_CC
Beiträge: 27
Registriert: 11. Sep 2012, 13:29
Kontaktdaten:

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von LarsJasch_CC » 08. Nov 2013, 20:43

Hendrik_Ambrosius hat geschrieben:Klar, habe einfach mal das aus der Anleitung genommen:

For <Var>,<LB>,<UB>,<Inc>,<Abschnitt>
Führt eine FOR-Schleife aus. Die Zählvariable ist <Var> wird von der Untergrenze <LB> zur Obergrenze <UB> in <Inc> Schritten hoch gezählt. Jedes Mal wird der Abschnitt <Abschnitt> aufgerufen. Die Zahlen dürfen auch negativ sein sowie Ober- und Untergrenze vertauscht werden (Abwärtsschleife). Wird <Inc> leer gelassen, wird 1 bzw. -1 angenommen.

Beispiel: For Counter,1,3,,UpSection
Verstehe ich das so richtig, das "counter" meine gesetzte variable
ist ? Und 1 bedeutet ab 1. Zeile der Sektion beginnen mit der schleife und bei Zeile 3 aufhören ? Oder die gesamte Sektion 3 mal durchlaufen ? UpSection ist dann quasi meine gesetzte Selektion wo meine regkeys entfernt werden sollen ? Und ,, bedeutet in schritten ? :D
Nicht falsch verstehen aber mit PowerShell fällt mir da ganze ziemlich einfacher ;)

LG und schönes Wochenende schon mal :)

Benutzeravatar
Hendrik_Ambrosius
Moderator
Moderator
Beiträge: 7409
Registriert: 13. Dez 2004, 23:10
Wohnort: Adendorf/Lüneburg

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von Hendrik_Ambrosius » 08. Nov 2013, 23:02

Counter: Ja.
Mit Zeilen hat das aber direkt nichts zu tun, die UpSection wird nur dreimal aufgerufen mit jeweils dem Counter-Wert.
Dort muss dann das Lesen der Zeile und das Löschen der RegKeys erfolgen.
Hendrik Ambrosius / Senior Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 AG | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 AG or of the support team.

LarsJasch_CC
Beiträge: 27
Registriert: 11. Sep 2012, 13:29
Kontaktdaten:

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von LarsJasch_CC » 08. Nov 2013, 23:40

Hendrik_Ambrosius hat geschrieben:Counter: Ja.
Mit Zeilen hat das aber direkt nichts zu tun, die UpSection wird nur dreimal aufgerufen mit jeweils dem Counter-Wert.
Dort muss dann das Lesen der Zeile und das Löschen der RegKeys erfolgen.
Um ehrlich zu sein hatte ich das ganze auch heute Mittag schon mal ausprobiert da ich es auch aus der doku entnommen hatte. Habe da nur rum experimentiert.... :roll: Was aber nicht ging das jedes Paket aus der ini der variable

der schleife übergeben wurde, selbst wenn nur 1 Paket in der ini steht.

So würde ich es machen:

........
[Product-Install]
; Da ini vorhanden ist, die Installation starten und alte Paketvorgänger RegKeys aus Variable "IniContent" löschen

; Logfile schreiben
Callhidden cmd /c Echo %SysDate% %SysTime% - %SWIniPath% was found and old Package Registry Keys can be deleted! > C:\temp\%ProductName%_%SWIniFile%_FOUND.log

; For Schleife deklarieren
For Counter,1,3,1,DeleteRegKeys

[DeleteRegKeys]
; ini einlesen in variable
set IniContent=ReadTextFile ("%ReadSWIni%")

; logfile weiter beschreiben
Callhidden cmd /c Echo %SysDate% %SysTime% - Packages was been found in %SWIniFile% ! >> C:\temp\%ProductName%_%SWIniFile%_FOUND.log

;Alle Paketnamen welche durch ini ausgelesen wurden aus Reg löschen
-HKLM,"SOFTWARE\CC\%IniContent%"%Counter%

.......

Fehlt da jetzt noch was ? O_O

Benutzeravatar
Hendrik_Ambrosius
Moderator
Moderator
Beiträge: 7409
Registriert: 13. Dez 2004, 23:10
Wohnort: Adendorf/Lüneburg

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von Hendrik_Ambrosius » 09. Nov 2013, 09:27

Weil wohl das zeilenweise Auslesen der Datei mit ReadTextFile nicht geht, wie ich schon ganz am Anfang schrieb.
Können Sie als Input keine INI- oder XML-Datei nehmen?
Dann wäre alles sehr einfach.
Hendrik Ambrosius / Senior Consultant
Mobile: +49 172 408 4447 | hendrik.ambrosius@matrix42.com
Matrix42 AG | Elbinger Straße 7 | 60487 Frankfurt am Main | Germany | www.matrix42.com

Disclaimer: I participate in this forum on a voluntary basis. Views expressed are not necessarily those of Matrix42 AG or of the support team.

LarsJasch_CC
Beiträge: 27
Registriert: 11. Sep 2012, 13:29
Kontaktdaten:

Re: Ini Datei einlesen und alle Zeilen einzeln abarbeiten

Beitrag von LarsJasch_CC » 09. Nov 2013, 12:02

Hallo Herr ambrosius :-)

Ich hatte extra von Anfang an mit einer Software.ini Datei gearbeitet ;) So wie ich sie verstehe Soll ich readtextFile verwenden aber eine ini mit diesem befehl zeilenweise einlesen oder gibt es eine readini Funktion ?

Ist mein Setup.inf product-install argument richtig ? :mrgreen:

Antworten

Zurück zu „Hilfe und FAQ“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast