Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch-Programmierung - Wo ist der Fehler?

Frage Entwicklung Batch & Shell

Mitglied: odicin

odicin (Level 1) - Jetzt verbinden

12.05.2006, aktualisiert 13.05.2006, 5332 Aufrufe, 6 Kommentare

Folgende Problemstellung:
Ein Programm wird vom Server aus von einem Client aktualisiert. Auf dem Server ist eine Datei mit einer Versionsnummer, im Programmverzeichnis des Clients auch. Ist die auf dem Server eine höhere, wird aktualisiert. Das ganze läuft übers Login-Script bei Anmeldung des Clients. Soweit so gut. Wenn das Programm allerdings vom Client übers Autostart-Menü gestartet wird, kann die Aktualisierung nicht korrekt ausgeführt werden, da Teile des Programms im Zugriff sind. Mittels pskill (von Sysinternals) kann ich das Programm vor der Aktualisierung zwar schließen, allerdings soll es natürlich nur dann geschlossen werden, wenn eine Aktualisierung ansteht. Folgendes Script ist im Moment im Einsatz, funktioniert aber nicht ordnungsgemäß. Das Programm wird im Moment immer geschlossen.

<-- beginn code -->
FOR /F "TOKENS=1*" %%a IN (\\SERVER\Programm\Update_Client\UpdateVersion.Dat) DO (
SET /A server=%%a
)

FOR /F "TOKENS=1*" %%b IN (C:\Programme\Programm\UpdateVersion.Dat) DO (
SET /A lokal=%%b
IF NOT [%lokal%]==[%server%] \\SERVER\Programm\Update_Client\pskill.exe programm.exe
)
\\SERVER\Programm\Update_Client\UnattendedInstallation.exe
<-- end code -->

Wo liegt hier der Fehler? Normalerweise dürfte er die pskill nur dann ausführen, wenn die Versionsnummern nicht übereinstimmen. Es wird aber immer aufgerufen.

Gruß Odi
Mitglied: ahe
12.05.2006 um 14:39 Uhr
Hallo Odi,

mach' 'mal hier ein paar Leerzeichen, hinter bzw. vor den Gleichzeichen ...

IF NOT [%lokal%] == [%server%]

Danach hat es bei mir funktioniert. (Windows XP SP2)

Mit freundlichen Grüßen
Axel
Bitte warten ..
Mitglied: Biber
12.05.2006 um 18:57 Uhr
Moin Odi, Moin Axel,

ich sehe hier keinen Grund für ein Stochern im Nebel.

Fakt ist:
- pskill wird ausgeführt
- das kann nur sein, wenn [%lokal%] und [%server%] nicht gleich sind
- das wiederum können wir doch anzeigen lassen.

Problem werden eventuell nicht fehlende, sondern überzählige Leerzeichen sein, aber wozu spekulieren?
01.
FOR /F "TOKENS=1*" %%a IN (\\SERVER\Programm\Update_Client\UpdateVersion.Dat) DO ( 
02.
SET /A "server=%%a" 
03.
04.
:: Rem Frage: Wozu auf Numerischen Wert casten??  
05.
:: Rem Frage :Und was,  wenn bei Version 2.00 oder 2.1a drinsteht?? 
06.
:: Rem Und warum "Tokens=1*" statt Tokens ganz wegzulassen? Wenn numerisch, gibts eh nur 1 Token 
07.
 
08.
FOR /F "TOKENS=1*" %%b IN (C:\Programme\Programm\UpdateVersion.Dat) DO ( 
09.
SET /A "lokal=%%b" 
10.
11.
:Rem Vergleich gehört nicht in die FOR..IN..DO-Anweisung 
12.
IF NOT [%lokal%]==[%server%] echo  Lokal [%lokal%] NEQ Server[%server%] !! 
13.
pause 
14.
IF NOT [%lokal%]==[%server%] \\SERVER\Programm\Update_Client\pskill.exe programm.exe 
15.
 
16.
\\SERVER\Programm\Update_Client\UnattendedInstallation.exe
Ich habe erstmal eine Anzeige (echo... paus) eingebaut zum Testen.
Da kannst Du erst mal sehen "wie" unterschiedlich die Werte sind.
Und ggf. mir Strg-C abbrechen, bevor der Pskill losrennt.
Vielleicht ist nur ein Leerzeichen/eine Leerzeile/unsinn in einer Versions.dat.
Oder eine der Dateien Fehlt. Du prüfst ja nichts davon ab.

HTH
Biber
Bitte warten ..
Mitglied: odicin
12.05.2006 um 19:24 Uhr
:: Rem Frage: Wozu auf Numerischen Wert
casten??
:: Rem Frage :Und was, wenn bei Version
2.00 oder 2.1a drinsteht??

Die Versionsnummern in den Datein werden nur für die UnattendedInstallation beim Update genutzt und sind numerische Zahlen, ab eins an. ATM irgendwo bei 40. Daher der numerische Wert. Es steht auch nur der Wert drin, nichts weiter. Das Programm hat, da hast du Recht andere Versionsnummern, aber die werden für das Client-Update nicht herrangezogen.

:: Rem Und warum "Tokens=1*" statt
Tokens ganz wegzulassen? Wenn numerisch,
gibts eh nur 1 Token

Hmm... wusst ich noch nich Gute Idee...

:Rem Vergleich gehört nicht in die
FOR..IN..DO-Anweisung

Ok


IF NOT [%lokal%]==[%server%] echo Lokal
[%lokal%] NEQ Server[%server%] !!
pause
IF NOT [%lokal%]==[%server%]
\\SERVER\Programm\Update_Client\pskill.exe
programm.exe
Ich habe erstmal eine Anzeige (echo... paus)
eingebaut zum Testen.
Da kannst Du erst mal sehen "wie"
unterschiedlich die Werte sind.

Ok, werd ich ausprobieren.

Oder eine der Dateien Fehlt. Du prüfst
ja nichts davon ab.

Brauche ich eigentlich nicht, da wenn angenommen auf demClient die Datei fehlt, ist dort das Programm nicht installiert und der Aufruf von pskill geht am Clientrechner ins Leere. Ist zwar nicht schön, richtet aber in dem Fall am Client-Rechner auch keinen Schaden an.

Gruß Odi
Bitte warten ..
Mitglied: odicin
12.05.2006 um 20:30 Uhr
Ergebnis: Die Sache funktioniert. Das einzige was ich geändert habe, war die IF NOT-Abfrage nicht in der FOR-Schleife laufen zu lassen. Das eingebaute Echo hatte auch die korrekten Parameter angezeigt und ich hab die ganze Sache auch nochmal zur Sicherheit am entsprechenden Client-Rechner getestet.

Mich wundert es zwar ein wenig das es daran gelegen haben soll, aber nun gut. Jetzt läuft die Sache.

Gruß Odi
Bitte warten ..
Mitglied: Biber
12.05.2006 um 22:06 Uhr
Moin Odi,

fein, wenn es jetzt läuft - dann könnten wir beide jetzt eigentlich mit dem Wochenende anfangen..

Ein Tipp noch:
Die zwei Zeilen

IF NOT [%lokal%]==[%server%] echo Lokal [%lokal%] NEQ Server[%server%] !!
pause

würde ich nicht ganz entsorgen.
Sondern grundsätzlich jeden Unterschied/Update in eine Serverlogdatei schreiben.

IF NOT [%lokal%]==[%server%] (
echo %date% %computername% von [%lokal%] auf [%server%] >>serverXY\freigabeZ\Clientupdates.log
)

Dann kannst Du hinterher sehen, wer wann upgedated hat und warum.

Schönes Wochenende
Biber
Bitte warten ..
Mitglied: odicin
13.05.2006 um 17:46 Uhr
Is ne richtig gute Idee Biber, werd ich einbauen.

Gruß Odi
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Splitten in Batch. Wo liegt der Fehler!? (4)

Frage von Todybear zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Windows Server
gelöst BackupExec 2016 Fehler beim Backup von Windows 2016 (1)

Frage von Looser27 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...