Jump to content

Programm per VBS "sauber" schließen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

ich möchte unter XP ein Programm per Batch/Script-Datei schließen. Leider poppt beim Beenden des Programms ein Bestätigungsfenster auf :-(

 

Der Befehl "Taskkill" haut das Programm ja rigoros aus dem Speicher und ich möchte verhindern, dass durch diese Art des Beendens Daten verloren gehen, die noch nicht geschrieben wurden.

 

Gibt es eine Möglichkeit per VBS oder Batch das Programm zu beenden und das Popup-Fenster zu bestätigen??

 

Danke schon mal im Voraus!

 

--

Peter

Link zu diesem Kommentar

Dann etwas mehr Input ... :-)

 

Jeden Sonntag um 4 Uhr soll durch ein Script/Batch ein spezielles Programm "sauber" geschlossen werden, damit bestimmte LOG-Dateien aus dem Programmverzeichnis erst gesichert und anschließend gelöscht werden können.

 

Danach startet dann das Programm wieder und erzeugt ein neues Log-File ... bis zum nächsten Sonntag.

 

TASKKILL haut das Programm ja leider rigoros aus dem Speicher und ich habe Angst, dass dann die LOG-Dateien, die gesichert werden sollen, noch schreibgeschützt sind.

 

Wird das Programm übers GUI beendet, erscheint ein Popup-Fenster "Wollen sie wirklich beenden!" ... und genau dieses Fenster müsste durchs Script/Batch geschlossen werden.

 

Huiii, ich hoffe, jetzt reichen die Angaben?! :-)

 

--

Peter

Link zu diesem Kommentar

Hallo Peter,

 

die Infos sind ja schon ganz nett, aber reichen leider noch nicht...

 

die Fragen kommenn jetzt:

 

1. Wie handelst du da im Moment? (bat, schtask...)

2. Hast du schon irgendein Stückchen Code dazu?

3. Wenn nein, hast du schon irgendeine Vorstellung, wie das laufen soll?

Soll z.B. ein vbs mit schtask angestossen werden, um einen Prozess zu beenden?

 

 

Gruß

 

Dirk

Link zu diesem Kommentar

Bis vor ein paar Woche hatte ich es über eine stinknormale Batch-Datei und TASKKILL realisiert :-( Es ergab sich aber bereits 2 Mal das Phänomen, dass das Programm dann beim Re-Start NICHT mehr anlief!!!

 

Ich vermute einfach, dass durch den Taskkill-Befehl einfach irgendeine INI oder sonstige Systemdatei beschädigt wurde bzw. nicht vernünftig geschlossen/geschrieben wurde.

 

Aus diesem Grund habe ich dann die letzten beiden Wochen das Programm händisch geschlossen und dann die Batch ohne den Taskkill-Befehl laufen lassen.

 

VB-Erfahrung fehlt mir eigentlich völig ;-) DOS-Batch-Dateien kriege ich aber hin :-)

 

Insofern bin ich für jeden "frischen Code" zur Problemlösung dankbar!

 

--

Peter

Link zu diesem Kommentar

Insofern bin ich für jeden "frischen Code" zur Problemlösung dankbar!

Peter

 

Dann schauen wir mal...

 

Set WshShell = WScript.CreateObject("WScript.Shell")
' Vorbereitung
WshShell.Run "%windir%\notepad "
WshShell.AppActivate "Editor"
WScript.Sleep 1500
WshShell.SendKeys "1{+}"
WScript.Sleep 500
WshShell.SendKeys "2"
WshShell.SendKeys "="
WshShell.SendKeys "3"
WshShell.Run "calc"
WScript.Sleep 900
WshShell.AppActivate "Calculator"
WScript.Sleep 100
WshShell.SendKeys "1{+}"
WScript.Sleep 500
WshShell.SendKeys "2"
WScript.Sleep 500
WshShell.SendKeys "~"
WScript.Sleep 500
WshShell.SendKeys "*3"
WScript.Sleep 500
WshShell.SendKeys "~"
WScript.Sleep 2500
'Ende Vorbereitung

Set colProcessList = GetObject("Winmgmts:").ExecQuery ("Select * from Win32_Process")
For Each objProcess in colProcessList
If objProcess.name = "notepad.exe" then vFound = True
Next
If vFound = True then
Set oAutoIt = WScript.CreateObject("AutoItX3.Control")
oAutoIt.Sleep 100
WshShell.AppActivate "Editor"
oAutoIt.Sleep 1000
oAutoIt.Send "!{F4}"
oAutoIt.WinWaitActive "Editor", "Aktuelle Änderungen speichern?"
oAutoIt.Sleep 1000
oAutoIt.Send "!n"
oAutoIt.Sleep 1000
oAutoIt.WinWaitClose "Unbekannt - Notepad", ""
End If
Set WshShell = Nothing
Set oAutoIt = Nothing
MsgBox "Fertig! Rechner von Hand schliessen :-)"

 

Dann fehlt dir nur noch AutoIt und ein deutsches System...

AutoIt gibts hier:

AutoIt v3 - Automate and Script Windows Tasks - For Free!

 

 

Gruß

 

Dirk

Link zu diesem Kommentar
Hi Dirk,

warum nicht gleich das Ganze in AutoIT ?

 

Gruß,

Jaksa

 

Ganz einfach...

 

Wenn es evtl. mehrere Möglichkeiten gibt, warum nicht beide zumindest mal zeigen...

 

Wenn es rein mit Boardmitteln realisierbar wäre, bräuchte keine 3'rd Party Software wie AutoIt eingesetzt werden. Das kann ich aber nicht beurteilen, sondern nur Peter. Daher zumindest mal die Andeutung mit Sendkeys.

 

 

Gruß

 

Dirk

Link zu diesem Kommentar

An "Bordmitteln" steht hier ein "nacktes" XP-SP3 und seit ein paar Stunden "AutoIt" zur Verfügung :-)

 

Zumindest habe ich durch Euch eine Menge Denkanstösse erhalten und ich denke, dass es mit "AutoIt" funktionieren wird! Dein VBS-Script muss ich mir mal Zeile für Zeile ansehen um zu verstehen, was da eigentlich abgeht, Dirk ;-)

 

--

Peter

Link zu diesem Kommentar

Wenn es evtl. mehrere Möglichkeiten gibt, warum nicht beide zumindest mal zeigen...

 

Wenn es rein mit Boardmitteln realisierbar wäre, bräuchte keine 3'rd Party Software wie AutoIt eingesetzt werden. Das kann ich aber nicht beurteilen, sondern nur Peter. Daher zumindest mal die Andeutung mit Sendkeys.

OK, in diesem Fall bin ich einverstanden ;).

Ich dachte das sollte ein Lösungsvorschlag für das Problem sein (habe es mir ehrlicherweise nicht genau angeschaut - Asche über mein Haupt), in diesem Fall würde ich bei einem Tool blieben.

 

@Peter: Wenn Du noch Fragen hast, nur zu.

 

Grüße,

Jaksa

Link zu diesem Kommentar

Ihr seid soo gut zu mir! Werde Euch in mein Nachtgebet einschließen :)

 

"AutoIt" ist ja ein mächtiges Werkzeug, das scheinbar genau das kann, was ich suche ... ;-)

 

Programm systemkonform schließen, auf der Netzwerkplatte ein neues Verzeichnis anlegen mit dem aktuellen Datum als Namen, dann die betreffenden Files aus dem eigentlich Programmverzeichnis kopieren bzw. verschieben ... und zu guter Letzt das Programm wieder starten ... :-) Das LIEST sich zumindest einfach ... jetzt muß ich mich nur noch in "AutoIt" reinknien! :confused:

 

Zumindest war das ein wirklich toller Tipp, jaksa!! :D

 

Aber auch Danke an Dirk für die ersten Tipps bezüglich VB ;)

 

--

Peter

Link zu diesem Kommentar

Programm systemkonform schließen, auf der Netzwerkplatte ein neues Verzeichnis anlegen mit dem aktuellen Datum als Namen, dann die betreffenden Files aus dem eigentlich Programmverzeichnis kopieren bzw. verschieben ... und zu guter Letzt das Programm wieder starten ... :-) Das LIEST sich zumindest einfach ...

 

--

Peter

 

Eine kleine Impression zu dem Datum Laufwerkproblem :)

 


Set oFSO = CreateObject("Scripting.FileSystemObject")
aFolder = Split(DateAdd("d", Now(), 0), ".") 
Logpath = "\\Server\Share\"
For i = UBound(aFolder) To LBound(aFolder) Step -1
sFolder = sFolder & aFolder(i)
Next
MsgBox sFolder
If not oFSO.FolderExists (Logpath & sFolder) Then
oFSO.CreateFolder(Logpath & sFolder)
End If

 

Sowas legt dir einen Ordner mit tagesaktuellem Datum an(20090205).

Wenn du es anderrum brauchst muss du LBound to UBound machen und Step -1 entfernen.

 

Files kopieren

CopyFile

 

Files verschieben

MoveFile

 

Starten

 

WshShell.Run "Pfad\Programname "

 

So und jetzt viel Spaß beim Coden

 

Gruß

 

Dirk

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...