Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung VB for Applications

GELÖST

Script um Prozesse (excel) zu beenden

Mitglied: highxvoltage1989

highxvoltage1989 (Level 1) - Jetzt verbinden

24.08.2010, aktualisiert 25.08.2010, 7562 Aufrufe, 6 Kommentare

Hey Leute,

ich wollte folgendes basteln, und zwar wird das Skript gestartet.
Nun soll es schaun, ob ein Excel-Prozess läuft...wenn ja, dann soll dieser nach 3 Minuten beenden werden.
Sollte in der Zwischenzeit ein weiterer Excel-Prozess auftauchen, soll dieser natürlich auch nach 3 Minuten beendet werden usw.
Habe jedoch das Problem, dass er mir sofort alle Excel-Prozesse abschießt.
Wenn kein Excel läuft, soll halt ständig überprüft werden, ob ein Excel-Prozess läuft oder nicht....
Das Skript funktioniert teilweise, seht ihr paar Fehler oder die Möglichkeit es einfacher zu gestalten?!

(PID? also Prozess ID um Excel-Prozesse zu unterscheiden?!)

Folgender Fehler taucht auch unteranderem auf:
Objekt erforderlich "WshShell"

Danke und Gruß
Volti ;)

'Zeit: WScript.Sleep 1000 * 60 * 3 'ms * secs per min * minutes
'---------------------------------------------------------------------------------------

'Überprüft ob EXCEL läuft:
'------------------------------------------
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'excel.exe'")


'Wenn EXCEL läuft, wird eine Info ausgeworfen und der Prozess wird dann nach 3 Minuten beendet:
'-------------------------------------------------------------------------------------------------

If colProcesses.Count = 1 Then

Dim Answer
Set WshShell = WScript.CreateObject("WScript.Shell")
Answer = WshShell.Popup("Excel wird in 3 Minuten beendet!", 3, "Info", 0 + 64)
WScript.Sleep 1000 * 60 * 3 'ms * secs per min * minutes

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

i=kill
Do while i=kill
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'excel.exe'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
WScript.Sleep 1000 * 60 * 3 'ms * secs per min * minutes
Loop

'Wenn EXCEL nicht läuft, dann überprüfe in 5 Minuten wieder nach ob es läuft (=BEGINNE DIESES SCRIPT VON VORNE)
'-------------------------------------------------------------------------------------------------------------------

Else
Wscript.Sleep 1000 * 60 * 5 'ms * secs per min * minutes
end if

'Hier den Pfad Eingeben, wo dieses Script liegt.
'------------------------------------------------------------------------------------------------------

Return = WshShell.Run ("Pfad")
Mitglied: 76109
25.08.2010 um 10:22 Uhr
Hallo highxvoltage1989!

Worin liegt eigentlich der Sinn des Ganzen?

Falls mehrere Excel-Apps geöffnet sind, woher soll man bezüglich der PopUp-Meldungen wissen, welche Excel-App geschlossen wird?

Soll es für das Skript ein Zeitfenster geben? Anzahl Stunden nach Start des Skripts, bis zu einer bestimmten Zeit z.B. bis 17:00 Uhr, sowas in der Art?

Gruß Dieter
Bitte warten ..
Mitglied: highxvoltage1989
25.08.2010 um 11:51 Uhr
Hi Dieter!

Der Sinn liegt darin, dass die einzelnen Excel-Applikationen auf dem Server nicht länger als 3 Minuten für ihre Verarbeitung brauchen! Wenn´s länger dauert, hat sich nämlich ein Fehler eingefangen.

Das PopUp-Fenster war für mich nur eine Orientierung und kann eig. wegfallen. Der User braucht nicht über die Beendigung der Excel-Instanz verständigt werden, es soll alles schön auto. ablaufen.

1. Excel-Instanz gestartet ...läuft...3.Minute = Exit
2. Excel-Instanz 1 Minute später gestartet ...läuft...3.Minute = Exit
3. ...

bei mir jedoch

1. Excel-Instanz gestartet ...läuft...3.Minute = Exit
2. Excel-Instanz 1 Minute später gestartet ...wird jedoch auch zur 3.Minute der ersten Excel-Instanz gestoppt.

Nein, das Skript sollte schon "non-stop" durchlaufen, also kein Zeitfenster.

Gruß Volti
Bitte warten ..
Mitglied: 76109
25.08.2010 um 14:22 Uhr
Hallo Volti!

Dieses Script könnte eventuell Deine Anforderungen erfüllen?

Strategie:
Ein Listenarray erstellen, die derzeit für maximal 20 gleichzeitige Prozesse ausgelegt ist. Eine Endlosschleife, in der die jeweiligen Prozesse mit Prozess-ID und der aktuellen Zeit + 3 Minuten (Schließzeit) in der Liste registriert und bei überschreiten der zulässigen Zeit aus der Liste gelöscht und terminiert werden.

Testen kannst Du einfach, in dem Du die Zeit zu Testzwecken mal auf 1 Minute änderst (siehe Codezeile 42) und anstatt Excel.Exe die NotePad.Exe o.ä. verwendest.
01.
Const ProcessListMax = 20 
02.
Const ProcessListId = 0 
03.
Const ProcessListTime = 1 
04.
 
05.
Dim strComputer, objWMIService, colProcesses, objProcess, ProcessList, i 
06.
 
07.
    strComputer = "." 
08.
     
09.
    ReDim ProcessList(ProcessListMax, 1) 
10.
     
11.
    For i = 0 To UBound(ProcessList) 
12.
        ProcessList(i, ProcessListId) = 0 
13.
    Next 
14.
     
15.
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
16.
     
17.
    Do While 1 
18.
        Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'Excel.exe'") 
19.
         
20.
        For Each objProcess In colProcesses 
21.
            If ProcessTerminate(objProcess.Properties_("ProcessId")) = True Then objProcess.Terminate 
22.
        Next 
23.
    Loop 
24.
 
25.
Private Function ProcessTerminate(ByVal Id) 
26.
    Dim i 
27.
     
28.
    ProcessTerminate = False 
29.
     
30.
    For i = 0 To UBound(ProcessList) 
31.
        If ProcessList(i, ProcessListId) = Id Then 
32.
            If Now >= ProcessList(i, ProcessListTime) Then ProcessList(i, ProcessListId) = 0:  ProcessTerminate = True 
33.
            Exit Function 
34.
        End If 
35.
    Next 
36.
     
37.
    For i = 0 To UBound(ProcessList) 
38.
        If ProcessList(i, ProcessListId) = 0 Then 
39.
            ProcessList(i, ProcessListId) = Id 
40.
            ProcessList(i, ProcessListTime) = DateAdd("n", 3, Now) 
41.
            Exit For 
42.
        End If 
43.
    Next 
44.
     
45.
    If i > UBound(ProcessList) Then MsgBox "Die ProzessListe ist Voll!", vbExclamation, "Fehler":  Exit Function  
46.
End Function
Gruß Dieter

[edit] In Codezeile 32 und 40 Time durch Now ersetzt [/edit]
Bitte warten ..
Mitglied: highxvoltage1989
25.08.2010 um 15:39 Uhr
Hi Dieter!

wow...echt Spitze, ich danke dir vielmals für deine Bemühung

Gruß
Bitte warten ..
Mitglied: 76109
25.08.2010 um 15:51 Uhr
Hallo Volti!

Zitat von highxvoltage1989:
wow...echt Spitze, ich danke dir vielmals für deine Bemühung
Yepp, gern geschehen

Gruß Dieter
Bitte warten ..
Mitglied: 76109
25.08.2010 um 16:22 Uhr
Hallo nochmal!

Habe noch eine kleine Änderung im Code in Codezeile 32/40 vorgenommen, weil ich nicht die Zeit um Mitternacht (00:00) bedacht habe. Anstatt Time jetzt Now (Datum + Zeit)

Gruß Dieter
Bitte warten ..
Ähnliche Inhalte
VB for Applications
Prozess Beenden mit VBA (Excel)
gelöst Frage von ritzmannVB for Applications2 Kommentare

Hallo zusammen Drehe momentan am Rad, da ich nicht mehr weiter weiss. Erhoffe mir durch euch eine Lösung zu ...

Windows 7
Wie kann ich das beenden eines Prozesses Protokollieren?
Frage von ScrollerWindows 77 Kommentare

Hallo, sporadisch beenden sich an einem unserer PCs Prozesse (Win 7 Prof). Im eventlog steht nichts dazu. Gut wäre ...

Windows Server
Software Prozesse über GPO beenden
gelöst Frage von dakoerryWindows Server7 Kommentare

Guten Tag kann mir einer helfen, möchte gerne alle PC´s in einer Server 2012 R2 Domain einen bestimmten Prozess ...

Batch & Shell
Remote Prozesse Beenden
gelöst Frage von HanutaBatch & Shell6 Kommentare

Hallo Zusammen, gibt es die Möglichkeit von Powershell mit Stop-Process z. B. den Firefox auch Remote zu beenden? Möchte ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 10 StundenLinux1 Kommentar

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit24 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...

Windows 10
Automatische daten kopieren, USB zu USB unter Win10 im Hintergrund
Frage von DerEisigeWindows 1016 Kommentare

Hallo Leute, ich bin auf der Suche nach einem Skript, dass von einem USB Stick automatisch nach dem einstecken ...