fusselchen 10 Geschrieben 21. Februar 2006 Melden Teilen Geschrieben 21. Februar 2006 Hallo Board! Ich habe eine doofe Nuss zu knacken, bei der ich alleine nicht weiterkomme. Das Szenario: In einem Netzwerk liegt auf dem Server (2K) in einem freigegebenen Ordner eine EXE. Der Ordner ist bei den Usern (2K/XP) als Laufwerk (F:\) gemappt. Auf dem Desktop der User liegt eine Verknüpfung zu dem Programm. Das Starten des Programmes dauert mitunter etwas länger, da noch zig grosse Dateien nachgeladen werden und manchmal noch auf offene Dateien gewartet wird, gerade viel Traffic auf dem Netz ist, etc. Die Folge: User muss manchmal etwas länger warten als normal und klickt dann nochmal und nochmal und nochmal... (nach dem Motto: das MUSS doch irgendwann mal gehen...) Das Problem: Programm wird dann mehrere male geöffnet und PC schmiert ab. 1 Minute später klingelt mein Telefon... Mein Lösungsansatz (?): So, nun hab ich mir gedacht, ich bastel mal ´ne kleine Batch-Datei, die den mehrfachen Start abfängt (ist nur ein Beispiel mit Winword, aber im Prinzip das gleiche): C:\WORD.BAT @echo off if exist c:\word.tmp goto raus :ersterstart copy c:\word.bat c:\word.tmp >nul "c:\programme\microsoft office\office11\winword" del c:\word.tmp :raus exit Funktioniert ja auch. Aaaaaber: Es wird eine DOS-Box geöffnet, das ist 1. unschön und 2. fehlerträchtig. Schließt der User die DOS-Box VOR dem eigentlichen Programm ("in dem Fenster passiert ja überhaupt nichts, das kann ich doch schliessen..."), wird die Temp-Datei nicht entfernt und er kann das Programm überhaupt nicht mehr starten. 1 Minute später klingelt mein Telefon... Hat jemand ´ne Idee???? Außer Telefon abstellen :D??? Darf auch gerne ganz was anderes sein als Batch. Liebe Grüße, Fusselchen Zitieren Link zu diesem Kommentar
Demon72 10 Geschrieben 21. Februar 2006 Melden Teilen Geschrieben 21. Februar 2006 Der Ansatz ist doch gar nicht schlecht. Das ganze als VBScript bzw. WSH und es läuft ohne DOS-BOX. Persönlich schreibe ich solche Sachen mit "AutoIt" - eine nette Scriptsprache mit GUI und Compiler und sehr einfach. Zitieren Link zu diesem Kommentar
fusselchen 10 Geschrieben 21. Februar 2006 Autor Melden Teilen Geschrieben 21. Februar 2006 Geiler Tip, jetzt muss ich nur noch VB lernen ;) OK, ich habe das jetzt ganz quick und ganz dirty so gut ich kann zusammengeklatscht: set fs = CreateObject("Scripting.FileSystemObject") if fs.fileExists("c:\btg_act.tmp") then msgbox ("Programm wurde bereits gestartet") else set fs = createobject("Scripting.filesystemobject") set logbuch = fs.opentextfile("c:\btg_act.tmp", 2, true,0) logbuch.writeline now & ": gestartet" logbuch.close set wshell = CreateObject("Wscript.shell") wshell.run """c:\programme\microsoft office\office11\winword""" set fso = CreateObject("Scripting.FileSystemObject") set f1 = fso.GetFile("c:\btg_act.tmp") f1.Delete end if Und wie schaffe ich es, daß das Script wartet, bis die Winword.exe geschlossen wird, bevor es weitermacht? Liebe Grüße, Fusselchen Zitieren Link zu diesem Kommentar
netsniffer 10 Geschrieben 21. Februar 2006 Melden Teilen Geschrieben 21. Februar 2006 Ist das ein Programm, das ihr selbst entwickelt habt ? Da gibts ganz schöne Möglichkeiten das im Sourcecode abzufangen... Alternativ könntest du eine kleine Anwendung machen, die abfragt, ob im System bereits ein Prozess mit dem Namen des auszuführenden Prozesses vorhanden ist. Wenn ja kommt dann die Meldung dass der Prozess schon läuft, wenn nicht wird das Programm gestartet.... Zitieren Link zu diesem Kommentar
fusselchen 10 Geschrieben 21. Februar 2006 Autor Melden Teilen Geschrieben 21. Februar 2006 Nein, das Programm ist eine von einer Fremdfirma speziell für den Kunden geschriebene Applikation. Die Idee, den Prozess abzufragen ist klasse, aber wie mach ich das? Zitieren Link zu diesem Kommentar
master-obi-wan 10 Geschrieben 21. Februar 2006 Melden Teilen Geschrieben 21. Februar 2006 Hallo, probiers mal damit: ;) checktasks.vbs Option Explicit Stop On error Resume Next '================== 'Declarations '================== Dim user,domain Dim wshShell Dim strUserName Dim loc Dim svc Dim proc_list Dim proc Dim ret Dim oArgs Dim Program Dim Target Dim Start '================== 'Main Body '================== Set oArgs =WScript.Arguments set loc = createObject("WbemScripting.SWbemLocator") Set wshShell = CreateObject("Wscript.Shell") Program = oArgs(0) Target = oArgs(1) strUserName = wshShell.ExpandEnvironmentStrings("%Username%") loc.security_.impersonationLevel = 3 'impersonate set svc = loc.connectServer(".","root\cimv2") set proc_list = svc.ExecQuery("Select * from Win32_Process") for each proc in proc_list ret = proc.GetOwner(user,domain) if ret <> 0 then 'wscript.echo "Error executing GetOwner for process " & proc.Name & " ,Error value = " & ret Else 'If proc.name = Program then If UCase(proc.name) = UCase(Program) then If strUserName = user then WScript.Echo "Hallo " & user & " !" & vbCrLf & "Das Programm " & Program & " läuft bereits !" & vbCrLf & "Bitte noch etwas Geduld !" WScript.quit End If End If end if next start = WshShell.run(Target) Aufruf: checktasks.vbs notepad.exe %SystemRoot%\system32\notepad.exe Zitieren Link zu diesem Kommentar
netsniffer 10 Geschrieben 21. Februar 2006 Melden Teilen Geschrieben 21. Februar 2006 Is gar nicht kompliziert: lad dir mal die Pstools von Sysinternals runter. Da drin gibts ein tool pslist.exe. Das wenn du aufrufst mit "pslist -e prozessname" dann bekommst du als Ausgabe wenn der Prozess nicht gestartet ist eine ausgabe in der enthalten ist "was not found on". du kannst also so was in der art machen: Pseudocode: if ( pslist -e prozessname entählt "was not found on") --> Programm starten else --> Meldung dass Programm schon startet Is aber nur eine von vielen Möglichkeiten Zitieren Link zu diesem Kommentar
fusselchen 10 Geschrieben 21. Februar 2006 Autor Melden Teilen Geschrieben 21. Februar 2006 Warum in die Ferne schweifen, wenn die Lösung liegt so nah: wshell.run """c:\programme\microsoft office\office11\winword""",,true Vielen lieben Dank für eure Hilfe!!! Gruß, Fusselchen Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.