Prüfen ob Datei läuft

klacm

Grünschnabel
Guten Abend,

ich möchte mit vb.net ein Programm programmieren, dass überprüft ob datei 1 und datei 2 läuft. sollte datei 1/2 laufen sollte dann ein text kommen wo drin steht das die datei läuft(das macht man mit if then, aber was muss ich nach dem if eintragen?)

aber jetzt erstmal zu meinem ersten problem: mit welchem befehl kann ich auslesen ob eine datei läuft/im taskmanager aufgelistet ist?

danke im vorraus.

gruß klacm
 
Hi,
ich habe irgendwann mal mit der Klasse Process rumgespielt (C#) (siehe Anhang wenn Lust).

Da gibt es glaub ich eine Funktion GetProcesses in frmMain, wo alle laufenden Prozesse ausgelesen werden. Du kannst da dann über die Klassenmember auch sicher auf die Namen der Datei kommen. Das ist in dem Programm auch so, das ist quasi ein unvollständig nachgebauter Taskmanager, also ich denke mal das, was du brauchst ;)

Ich hoffe du kriegst das hin, weil es ja nicht VB ist ;)

Ansonsten ist das Prinzip so:

Code:
dim proc() as System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses("dein_rechnername_oder_so")

for each p as System.Diagnostics.Process in proc
      debug.write p.processname
next

Weitere Informationen kannst du aus p und p.modules bekommen, aber guck dir das Beispiel an.

Gruß, Adrian
 

Anhänge

  • frmMain.zip
    6,4 KB · Aufrufe: 29
ok, also dein befehl geht schonmal ohne probleme, aber jetzt kommt noch meine unerfahrenheit dazu und es geht nicht

Code:
		Dim proc() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses("localhost")
 
 		For Each p As System.Diagnostics.Process In proc
 			Debug.Write(p.ProcessName)

ich habe oben localhost eingetragen weil wenn ich mein computername eintrage er auf eine andere seite im internet zugreifen will. das ist nicht das problem aber wenn ich
Code:
 if p.ProcessName("Apache.exe") then Label3.Text("Apache Läuft") else Label3.Text("Apache läuft nicht")

unten drunter eingebe, dann passiert einfach nichts und es wird nur der vorher definierte text angezeigt. also wo liegt meine dummheit bzw. welchen befehl muss ich benutzen, dass wenn die datei apache.exe läuft der text Apache läuft angezeigt wird?
 
denk dran nen timer drin zu haben, damit der das sowieso immer aktualisiert, ne?
Weil wenn du das nur einmal aufrufst und du dann erst Apache startet, dann kann auch nichts passieren.
also muss die Funktion mit einem Timer arbeiten. das zuerst...

gib mal deinen Code, so ist das schwer zu sagen.

obwohl ich meine, das in den Prozessen apache.exe und nicht Apache.exe steht, also probier mal

achja, ich sehe grad...

p.ProcessName ist ein String, du musst also

Code:
dim proc() as System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses("localhost")

for each p as System.Diagnostics.Process in proc
      if p.ProcessName.ToUpper = "apache.exe".toUpper then
             Label3.Text = "Apache Läuft"
             exit for
      else
             Label3.Text = "Apache läuft nicht"
      end if
next

machen.

durchlaufe processe -> wenn process = APACHE.EXE -> läuft -> sonst: läuft nicht.

viel glück ;)
 
NRFi hat gesagt.:
denk dran nen timer drin zu haben, damit der das sowieso immer aktualisiert, ne?
Weil wenn du das nur einmal aufrufst und du dann erst Apache startet, dann kann auch nichts passieren.
also muss die Funktion mit einem Timer arbeiten.

Hi,


dieses Thema würde mich auch Interessieren, weißt du vielleicht wie das mit einem Timer aussehen müsste
 
ja, morgen wüsste ich es vielleicht wieder :)

ansonsten guck dir das C# Beispiel von mir an, was ich hochgeladen habe. Also der Zip-Anhang, da ist das schon fertig mit dem Timer
 
-.- ich bekomms einfach nicht hin. ich habe nichts am text geändert und es geht trotzdem nicht.

edit: es wird als Fehlerbegründung "As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses("localhost")" angezeigt

achja mal was nebenbei: ich habe einem freund eine frühere version meines programmes gegeben und bei ihm kommt, dass es keine gültige win32 anwendung sei. kann es sein, dass bei ihm die .net framework 2.0 beta version fehlt(ich arbeite mit der visual basic 2005 express edition beta version)
 
Zuletzt bearbeitet:
baa, jetzt muss ich auch noch mit virtual pc auf mein .net 2.0 system :(

ok, hier ein Beispiel VB.NET 2.0:

Code:
    Private Sub cmdstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdstart.Click
        Timer1.Interval = 2000
        Timer1.Start()
    End Sub

    Private Sub cmdstop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdstop.Click
        Timer1.Stop()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim processes() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses()

        For Each p As System.Diagnostics.Process In processes
            If p.ProcessName.ToUpper = txtprocessname.Text.ToUpper Then
                Label1.Text = txtprocessname.Text & " existiert."
                Exit Sub
            End If
        Next
        Label1.Text = txtprocessname.Text & " existiert nicht."
    End Sub

einfach starten und etwas warten, jede 2 sekunden wird nach den prozessen geschaut.
WICHTIG, kein .exe hinten dran.


gebraucht wird:

2 labels: label1, label2
2 buttons: cmdstart, cmdstop
1 timer: timer1
1 textbox: txtprocessname

bei mir hats ohne probleme hingehauen.
 
NRFi hat gesagt.:
bei mir hats ohne probleme hingehauen.

Hey,

danke bei mir auch.

Hab nur noch eine Frage weißt du wie man dass machen könnte, dass nicht nach einem Task gesucht wird, sondern nach einem Fenster, welches an hand des Titels identifiziert wird?
 
guck dir doch mal das C# Beispiel an, da werden die einzelnen Properties von Process benutzt:

p.MainWindowTitle


also, auch mal selber :google:

^^
 

Neue Beiträge

Zurück