Brauche Schnell Hilfe Bei Process.Start()

  • VB.NET

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von Snake.

    Brauche Schnell Hilfe Bei Process.Start()

    Hey leute ich hab ein problem, und zwar muss ich bis morgen abend ein projekt fertig stellen und bin in den endzügen.
    Habe einige mitarbeiter in dem Projekt und wir haben ca 5 exe dateien erstellt! Diese verknüpfe ich mit process.start():
    struktur wie folgt :

    auswahl:
    process.start( a ) oder process.start(b) . Man soll nun via process.start(auswahl) wieder zurück zur asuwahl geladnen. jetzt ist das problem aber, dass ich von auswahl zwar in a komme von a aber nicht zurück zur auswahl! Starte ich allerding a und gehe zur asuwahl darüber geht es, aber ich kommt nicht von auswahl in a! Ich versteh nicht so ganz wieso ich quasi nur einmal process start ausführen kann und dann nicht weiter ghen damit! Die "aalte exe" wird immer beended sprich es steth da :

    Process.start(a)
    end

    FEhler der mir asugegeben wird :

    Informationen über das Aufrufen von JIT-Debuggen
    anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

    ************** Ausnahmetext **************
    System.ComponentModel.Win32Exception (0x80004005): Das System kann die angegebene Datei nicht finden
    bei System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
    bei System.Diagnostics.Process.Start()
    bei System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
    Rest der Fehlermeldung
    bei System.Diagnostics.Process.Start(String fileName)
    bei WindowsApplication10.Form1.ZurückZurAuswahlToolStripMenuItem_Click(Object sender, EventArgs e)
    bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
    bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
    bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
    bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
    bei System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
    bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
    bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
    bei System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
    bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
    bei System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.269 (RTMGDR.030319-2600).
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
    ----------------------------------------
    Motoren Kompensation
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file:///C:/Users/****/Desktop/projekt%20abschluss/professional/motor/motor.exe.
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly-Version: 10.0.0.0.
    Win32-Version: 10.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll.
    ----------------------------------------
    System
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.269 built by: RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
    ----------------------------------------
    System.Core
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.233 built by: RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.269 built by: RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
    ----------------------------------------
    System.Drawing
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.276 built by: RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
    ----------------------------------------
    System.Configuration
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 (RTMRel.030319-0100).
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
    ----------------------------------------
    System.Xml
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.233 built by: RTMGDR.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
    ----------------------------------------
    System.Runtime.Remoting
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 (RTMRel.030319-0100).
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll.
    ----------------------------------------
    ClassLibrary2
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file:///C:/Users/ASUS/Desktop/projekt%20abschluss/professional/motor/ClassLibrary2.DLL.
    ----------------------------------------
    ButtonReset
    Assembly-Version: 1.0.0.0.
    Win32-Version: 1.0.0.0.
    CodeBase: file:///C:/Users/***/Desktop/projekt%20abschluss/professional/motor/ButtonReset.DLL.
    ----------------------------------------
    Microsoft.VisualBasic.PowerPacks.Vs
    Assembly-Version: 10.0.0.0.
    Win32-Version: 10.0.30319.1.
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic.PowerPacks.Vs/10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.PowerPacks.Vs.dll.
    ----------------------------------------
    System.Windows.Forms.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.1 built by: RTMRel.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
    ----------------------------------------
    mscorlib.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.0.30319.235 (RTMGDR.030319-2300).
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_de_b77a5c561934e089/mscorlib.resources.dll.
    ----------------------------------------

    ************** JIT-Debuggen **************
    Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    Konfigurationsdatei der Anwendung oder des Computers
    (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

    Zum Beispiel:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
    Ausnahmen an den JIT-Debugger gesendet, der auf dem
    Computer registriert ist, und nicht in diesem Dialogfeld behandelt.



    wäre echt cool wenn ihr mir helft sdne fehler zu beheben!!!!

    Edit by der_Kurt:
    Für lange Textpassagen bitte den Expander verwenden. Die Fehlermeldung und den Punkt, an dem der Fehler auftritt, habe ich draußen gelassen.
    * Expander eingefügt *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Snake schrieb:

    Das System kann die angegebene Datei nicht finden

    Sonst noch Fragen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    jain . bei der installation wird ein ordner system aufgerufen:

    sprich : process.stgart("..\auswahl.exe")

    oder halt process.start("trainee/trainee.exe")


    Zu dem datei nicht finden. Wieso windet er sie dann wenn ich trainee.exe starte und auf auswahl klicke die auswahl exe. und wenn ich über auswahl die trainee exe öffne die aus wahl dann nicht?

    Das doch total wiedersprüchlich einmal findet er sie einmal nicht? kann ja nicht aufeinmal nen andern weg gehen wenn ich die datei über auswahl starte ?! oder????



    also noch mal der weg : auswahl.exe starten --> trainee bereich aus wählen , da startet er die trainee exe. ---> auf zurück zur auswahl klicken ---> FEHLER
    anders: direkt die trainee.exe starten --> auf zurück von auswahl starten drücken ---> auswahl wird gestartet ---> trainee bereich auswahählen---> FEHler

    das macht für mich keinen sinn!!!

    Snake schrieb:

    einmal findet er sie einmal nicht?

    Ich präzisiere mal die obigen Hinweise der anderen User:

    process.stgart("..\auswahl.exe")
    oder halt process.start("trainee/trainee.exe")


    Keiner dieser Dateiname ist gültig. Ein gültiger Dateiname hat vorne einen Laufwerksbuchstaben, gefolgt von einem Doppelpunkt, und danach einen Pfad und den Dateinamen.
    Entweder du gibst dies alles mit an, oder du verwendest die dafür vorgesehenen Funktionen des Frameworks.
    Wenn du den Dateinamen erkennst, ist das OK. Aber die Fehlermeldung im Startpost sagt doch eindeutig, dass VB hier nichts finden kann.
    aber wie gebe ich das dann richtig an ?! der usre kan ndas ja hin installieren wo er will! und in dme verischnis spring ich quasi rum!! aber iwe geb ic hden datei pfad an wo das hin installiert wird?! ich will das nicht jedes mal in der recourse verankern !!!! das wöre doch sher umständlich!!!! oder wie realisier ich das????
    Die ganze Idee mit dem hin- und herstarten von Prozessen finde ich persönlich zwar eher .. gurkig, aber WENN ich es machen würde, würde ich ggf dem neuen Prozess per Parameter mitteilen, wer (also kompletter Pfad) ihn aufgerufen hat. So ist zumindest eine "Rückkehr" zum Aufrufer immer problemlos möglich.
    Mal abgesehen davon, dass ich VOR dem Aufruf von Process.Start natürlich prüfen würde, ob das Ziel überhaupt vorhanden ist ...
    Mach vielleicht mal dies:

    VB.NET-Quellcode

    1. If System.IO.File.Exists(NAME_DER_DATEI) Then
    2. Process.Start(NAME_DER_DATEI)
    3. Else
    4. MessageBox.Show(NAME_DER_DATEI & Environment.NewLine & "nicht gefunden")
    5. End If
    Und dann musst Du so lange an NAME_DER_DATEI fummeln, bis es passt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vollzitat eines Vorposts an dieser Stelle entfernt ~VaporiZed

    wie würdest du das denn am besten machen ?? also ich bin blutiger anfänger in vb daher kenn ich nur diese methode ! also wenn ihr iene besser möglichkeit habt wie ich die 5 exe datein verknüpfe dann gerne her damit!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Wenn du den relativen pfad hast, kannst du ihn mit dem pfad der assembly kombinieren.

    VB.NET-Quellcode

    1. System.IO.Path.Combine([Assembly].GetExecutingAssembly.Location, "relativer pfad")


    damit hast du den gültigen pfad, an welchem deine datei liegt.
    Warum brauchst du überhaupt verschiedene Exe Dateien?
    Hast du die selber geschrieben? Oder fremde Programme?

    Wenn sie selbst geschrieben sind, könntest du einfach alles in EINEM Programm sammeln?! Unterschiedliche Formen und ein Tool...

    Und... du schreibst da einen Wirrwar... Les dir das, was du posten willst nochmal durch, bevor du auf Absenden drückst.
    Ich musste mich echt anstrengen zu kapieren was du willst, mal davon ab, dass du extremst viele Schreibfehler da rein gegurkt hast.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Die schreibfehler bitte ich zu entschuldigen! Bin Legasteniker da kommt das mit ;)

    Ich habe verschiedene exe dateien, da wir das zu 5 programiert haben, sprich ich habe die codes nicht. Ich muss die einzelnen Exen verknüpfen!

    und gegen das wirrwarr verusch ichs nochmal besser zu schreiben:


    also 5 exen meine struktur bis jetzt :

    auswahl ---> trainee
    --->professional auswahl --> professional 1
    --> professional 2


    ich kann aber immer nur einen schritt gehen. Sprich von auswahl in trainee oder auswahl professinal. aber ein weiter schritt geht nicht also weder zurück noch von auswahl professional zu professional 1 oder 2. starte ich die exe dateien aber per hand so geht es. Sprich starte ich professional auswahl kann ich professional 1 oder 2 starten!

    Wieso das so ist weiß nicht nicht entzieht sich auch meiner logik. mahce das gnaze über prozess.start ! wenn es eine besser möglichkeit gibt wäre ich froh wenn ihr mir helfen könntet!
    Wenn du auf einzelne Exen angewiesen bist, wird prozess.start schon okay sein...
    Aber die Bestimmung der Dateipfade ist dein Problem.

    Ich weiß nicht wie du die Ordnerstruktur generiert hast...
    aber du kannst dir zB. mit Application.ExecutablePath auslesen, in welchem Pfad denn so das aktuell gestartete Programm liegt.
    Vielleicht ist es ja das, was du suchst.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    ja ich hab mit einem Setup-projekt eine setup datei erstellt, wodurch immer eine bestimmte ordnerstruktur erstellt wird! Ich weiß halt nur nicht wieso einmal der dateipfad stimmt und einmal nicht.

    wenn ich einmal prozess start gemacht habe, geht es will ich dann aus dem neuen prozess einen andern prozess starten geht es nicht. habe ich den eben neuen prozess zuerst gestartet habe und nen wieder den prozess der vorher nicht geklappt hat starten will, klappt es.

    Dann kann es doch nicht am datei pfad liegen oder?!
    Die Frage ist nun, welche Pfade sind es, die du im Process.Start angibst ^^
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    ok so ist das geordnet:

    ordner struktur:

    hauptordner

    trainee / professional

    motor / leucht


    Dementsprechende verknüpfung


    process.start ("trainee\trainee.exe") zurück wäre dann prozess.start ("..\auswahl.exe")

    process.start ("professional\auswahl-prof.exe") -----> den schritt könnte ich auch rausnehmen

    ---> von professional asu : process.start ("motor\motor.exe") oder process.start("leucht\leucht.exe")
    von den motor oder leucht zurück ----> process.start("..\..\auswahl.exe")


    so hab ich das gemacht! da der benutzer das ja irgendwo hin installieren kann , kann ichja keien kompletten pfad angeben und da die ordnerstruktur aj imemr so ist dachte ich geht das so gnaz gut!!
    Hier steht, wie du von deiner Exe aus an den entsprechenden Pfad kommst.
    Deine Pfadangaben sind relativ zu deiner ausgeführten Exe. Path.Combine löst den Relativen Pfad auf und Verbaut ihn mit dem Pfad der Assembly, den du durch ersteren Code-Teil bekommst. ([Application]...)

    So hast du eine gültige Pfadangabe (mit Laufwerksbuchstaben) und es sollte funktionieren.

    Überprüfe jedoch deine relativen Pfade ("..\..\Proc2\Bin\Bla.exe"), denn Process.Start(path) kann diese eigentlich auflösen, es sollte also auch so funktionieren. (Habe die letzten 3 Tage nichts anderes gemacht, bei mir funktioniert alles auf beiden angegebenen Wegen)

    Ansonsten wäre vielleicht ein Quellcode-Verwaltungssystem nützlich gewesen, so hättet ihr ein Programm, an dem jeder Zeitgleich arbeiten kann (Ich empfehle hier SVN).
    Vollzitat eines Vorposts an dieser Stelle entfernt ~VaporiZed

    auch wnens jetzt dumm ist , wie bau ich das richtig ein ? könntest ud mir das vllt an dem beispiel von process.start("trainee\trainee.exe") vielleicht mal erklärem ! wie gesasgt bin da echt blutger anfänger


    habe es so gemacht :

    Process.Start(System.IO.Path.Combine([Assembly].GetExecutingAssembly.Location, "trainee\trainee.exe"))

    aber er sagt assembly wurde nicht deklariert! wenn ich dann diese automatische fehlerkorrektur mache, erstellt er zusätzlich

    VB.NET-Quellcode

    1. Private Function Assembly() As Object
    2. Throw New NotImplementedException
    3. End Function


    aber wenn ich es teste findet er die datei erst gar nicht!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    VB.NET-Quellcode

    1. Imports System.Reflection

    Das sorgt dafür, dass [Assembly] funktioniert. (Es muss ganz oben hin unter Option Strict On!!!)

    VB.NET-Quellcode

    1. ' relativer Pfad zur Exe
    2. Dim relativePath As String = "trainee\trainee.exe"
    3. ' Pfad der aktuell ausgeführten Application
    4. Dim applicationPath As String = [Assembly].GetExecutingAssembly.Location
    5. ' Beide Pfade zu einem gültigen zusammen bauen
    6. Dim executablePath As String = System.IO.Path.Combine(applicationPath, relativePath)
    7. ' Ein neues Proc, welchem die auszuführende Datei genannt wird
    8. Dim proc As New Process
    9. proc.FileName = executablePath
    10. ' Start!
    11. proc.Start


    Du kannst übrigens aus dem Rückgabewert irgendwo noch den Exit-Code erfragen (weiß net wo, aber irgendwo im Result steckt der drinne)
    Wenn der nicht 0 ist, hatte das ausgeführte Programm einen Fehler.

    Nur als Hinweis, könnte bei eurem gefrickel ganz nützlich sein ;)

    (Der Absatz Process.New würde auch mit

    Visual Basic-Quellcode

    1. Process.Start(executablePath)
    funktionieren