Quote:1. wie kriere ich die BAt Datei? Text Editor mit Erweiterung BAt anlegen oder wie?
Genau. Leg die Datei im Suchpfad des Systems an (PATH) damit sie von überall aus gefunden wird. Z.B. im Windows-Verzeichnis, auch wenn das "optisch" nicht sehr sauber ist. Ansonsten mußt Du sie immer mit komplettem Pfadnamen aufrufen.
Falls Du noch nie eine Batchdatei geschrieben hast wird's 'ne harte Nummer, denke ich. Aber schaffbar...
Da zumindest die Entwicklungsphase in der Textkonsole ("Eingabeaufforderung") ablaufen wird solltest Du Dir ihre Verknüpfung auf's Desktop legen und ihre Einstellungen "verbessern" (links oben in ihrer Fenstertitelzeile das Icon anklicken / Eigenschaften), z.B. so:
Reiter Optionen:
- Puffergröße 50
- Quick-Edit aktiviert
- Einfügemodus aktiviert
Reiter Layout:
- Puffergröße Breite 120
- Puffergröße Höhe 3333
- Fenstergröße Breite 120
- Fenstergröße Höhe 50
Quote:2. Der Dienst wird immer auf deaktiviert stehen. Also zuerst brauche ich die Befhelzeile für starten. Du hast oben bereits was geschrieben, kann ich net start "Dienstname" nehmen?
Dienste auflisten kannst Du mit
net startDas zeigt den
Display_name an wie ihn der NET Befehl erwartet. Bei Leerzeichen Gänsefüßchen verwenden.
Wenn Du mit SC arbeitest mußt Du stattdessen den
Service_name angeben. Den bekommst Du aufgelistet mit
sc query|find "_NAME"bzw. einfach mit
sc query(unübersichtlicher, aber besser verständlich)
Quote:Bei SC weiss ich nicht was xxxx in der Befehlzeile bedeuten soll.
Das sagt Dir die Ausgabe des Befehls
sc configIn Deinem Fall wirst Du wohl entweder "demand" oder "disabled" verwenden. Finger weg von "system" und "boot" - damit würdest Du in den Bootvorgang eingreifen!
Quote:3. Dann brauche ich den Befehl zum Ausführen des Programms?
Den entnimmst Du aus der Desktop- oder Startmenüverknüpfung des entsprechenden Programms. Da das wahrscheinlich nicht im Suchpfad liegt mußt Du es in Deinem Skript immer mit vollem Pfad aufrufen. Auch hier Gänsefüßchen bei Leerzeichen nicht vergessen.
Quote:4. Als letztens - ich weiss nicht ob das ginge - folgendes: Ich habe getestet, dass wenn der Dienst auf deaktiviert ist, startet das programm nicht, das ist OK. Dann gehe ich in Dienste und aktiviere ihn, starte das Programm und gleich stelle ich ihn wieder auf deaktviert (damich ich es nicht vergesse) ---> das Programm bzw. der Scan funktioniert.
Also meine Idee ist , wenn der Script zum Schluss auch noch die Befehlzeile zum Deaktivieren beinhaltet, dann weiss ich dass der Dienst nach dem Reboot nicht mehr automatisch starten wird. Klar wird der Dienst während der ganzen Sitzung bis der PC neu gestartet wird immer noch im Hintergrund laufen, das weiss ich.
Genauso isses. Damit er nicht mehr läuft kannst Du ihn aber vor'm deaktivieren noch stoppen. Zumindest kann man es versuchen.
Quote:Also kurz gesagt, die BAT Datei sollte das beinhalten:
KSS DIenst aktivieren/starten
KSS Programm ausführen
KSS Dienst deaktivieren
Ich würde das detaillierter auflisten:
a) Dienst aktivieren (demand): SC CONFIG ...
b) Dienst starten: SC START ...
c) Programm ausführen: .EXE starten
d) Dienst stoppen: SC STOP ...
e) Dienst deaktivieren (disabled): SC CONFIG ...
Quote:Ob das so funktionieren wird, weiss ich nicht. Kann man das evtl noch Zeitverzögerung zwischen den Befehlzeilen einbauen ? Augenrollen
Das weiß man vorher nie. Eigentlich ein Klacks, aber der Teufel steckt im Detail und dann werden doch wieder 3 Tage und 3 Nächte 'draus...
Aber gut mitgedacht. Ich vermute daß a, b, d und e "freiwillig warten" werden sodaß man sich darum nicht kümmern muß. Bei c ist das aber nicht so sicher und man muß ev. Maßnahmen ergreifen. Falls das Skript nicht auf's Programmende wartet bevor es weitermacht starte Dein Programm durch
start /wait "Programm_mit_vollem_Pfad"Wenn das auch nicht hilft mußt Du Dich selber um die Ablaufsteuerung kümmern. Am einfachsten geht das mit dem Befehl PAUSE. Dann wartet das Skript bis Du eine Taste drückst.
Man kann auch mit statischen Wartezeitschleifen arbeiten, aber probier's erstmal so.
Bevor Du die einzelnen Befehle in ein Skript steckst probiere sie erstmal direkt auf der Kommandozeile aus. Wenn sie dort zweifelsfrei funktionieren baue sie in das Skript ein. Dann probiere das soweit erstellte Skript. Dann weiter mit dem nächsten Befehl.
Wenn Dich die ausführliche Bildschirmausgabe stört kannst Du den Befehl
@echo offeinsetzen - der unterdrückt zumindest die Befehlswiederholung. Oder auch
pause , dann wartet das Skript bis Du alles durchgelesen hast und eine Taste drückst.
Gut Holz!
P.S.: Ich muß jetzt noch dazusagen daß ich bisher nur in 32bit-Umgebung geskriptet habe. Mit 64-bit Windows ändern sich ein paar Dinge, aber ich vermute daß das in diesem Fall auch nicht weiter stört...