[Gelöst] C# Probleme... (Batch auf Knopfdruck öffnen)

TheJoGie

treuer Stammgast
Hallo, ich möchte eine .bat Datei auf Knopfdruck starten (C#)

doch wenn ich das hier nun starte:

Code:
        private void button1_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("C:\\script.bat");
        }

dann wird die Datei wenn man auf den Knopf drückt nicht ausgeführt und es wird angezeigt:

Datei nicht gefunden (oder so ähnlich, siehe Screenshot)

Das ist der Text wenn man "Ausnahmedetail in die Zwischenablage kopieren" anklickt:
verborgener Text:
=System.ComponentModel.Win32Exception wurde nicht behandelt. Message=Das System kann die angegebene Datei nicht finden Source=System ErrorCode=-2147467259 NativeErrorCode=2 StackTrace: bei System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) bei System.Diagnostics.Process.Start() bei System.Diagnostics.Process.Start(ProcessStartInfo startInfo) bei System.Diagnostics.Process.Start(String fileName) bei WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in C:\Users\Jonas\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs:Zeile 21. bei System.Windows.Forms.Control.OnClick(EventArgs e) bei System.Windows.Forms.Button.OnClick(EventArgs e) bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) bei System.Windows.Forms.Control.WndProc(Message& m) bei System.Windows.Forms.ButtonBase.WndProc(Message& m) bei System.Windows.Forms.Button.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.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) bei System.Windows.Forms.Application.Run(Form mainForm) bei WindowsFormsApplication1.Program.Main() in C:\Users\Jonas\AppData\Local\Temporary Projects\WindowsFormsApplication1\Program.cs:Zeile 18. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() bei System.Threading.ThreadHelper.ThreadStart_Context(Object state) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) bei System.Threading.ThreadHelper.ThreadStart() InnerException:


PS: Sry für die blöden Fragen, bin ABSOLUTER C#-Einsteiger.

Danke im Vorraus
 

Anhänge

  • c#-fehler.png
    c#-fehler.png
    123,8 KB · Aufrufe: 662
Naja, ich würde einfach mal darauf tippen, dass die Datei nicht vorhanden ist, anders heißt, oder wo anders liegt. ^^


Du kannst bei der Fehlermeldung aber auch mal auf "Details" gehen, dann erhältst du die Eigenschaften des Objektes, denn dieser Fehler ist nichts anderes, als ein Objekt der Klasse Win32Exception, das irgendwo im .NET-Framework als Fehler ausgeworfen wurde.
Auf jeden Fall gibt es da eine Eigenschaft "InnerException", meistens ist die null, aber nicht immer und dann kann man daraus noch schlauer werden. Außerdem gibt es noch andere Eigenschaften, vielleicht steht da was interessantes drin.


Aber wozu möchtest du überhaupt eine Batch-Datei in C# öffnen? Was Batch kann, kann C# schon lange, viel besser und viel schneller. ^^
Ich empfinde C# auch einfacher als Batch.



PS:
Ein kleiner Tipp:
Setz vor einen Datei-Pfad ein @-Zeichen, das hebt die maskierung (oder wie man das nennt) der Zeichen durch ein Backslash (\) auf, du kannst den Pfad also ganz normal rein schreiben:
Code:
System.Diagnostics.Process.Start(@"C:\script.bat");

Tipp2:
Schreib über alles, (dort wo der ganze using-Kram steht), folgendes hin:
Code:
using System.Diagnostic;
Dieses System.Diagnostic ist ein Namespace, ein Namensraum, wie der Name schon sagt und das wars dann auch wieder. Du kannst angeben, dass alle Inhalte dieses Namensraumes in der Datei, in der du gerade arbeitest, bekannt sein sollen, sie werden genutzt (using) und dann kannst du immer schreiben:
Code:
Process.Start(@"C:\script.bat");
Ist dann deutlich weniger Schreibaufwand und übersichtlicher. ^^


ot:

Und dann noch ein Tipp:
Visual C# 2012
Visual C# 2010 (Das habe ich gelesen)
Visual C# 2008
Diese drei Bücher sind sehr gut zum lernen geeignet, sie sind alle vom selben Autor und eigentlich reicht eines völlig aus, da sie alle drei den größten Teil der wichtigen Techniken lehren. Allerdings wird z.B. nur in der 2008-Version Windows-Forms gelehrt und danach nicht mehr, weil das langsam veraltet ist und nicht mehr genutzt wird. Soll heißen, die Bücher werden deswegen immer neu geschrieben, damit sie am Puls der Zeit bleiben.

Dir würde ich einfach mal die 2008-Version empfehlen, da dort WindowsForms erklärt wird und du viele Controls kennen lernst. Dort lernst du zwar nur das Minimum von WPF, aber WPF als Designer-Sprache für C# bringt dir nichts, wenn du C# nicht kannst, daher spielt das keine Rolle. Und die Kapitel kann man nachträglich ja immer noch einzeln lesen. ^^
 
Hallo,
danke für die ausführliche Antwort. :)
Doch wenn ich da oben
using System.Diagnostic;
hinschreibe, dann kommt
Der Typ- oder Namespacename "Diagnostic" ist im Namespace "System" nicht vorhanden. (Fehlt ein Assemblyverweis?)

Und wenn ich
Process.Start(@"C:\script.bat");
eintrage kommt die Meldung:
Der Name "Process" ist im aktuellen Kontext nicht vorhanden

Und ale ich mir das genauer angeguckt hab, stand da tatsächlich
Das System kann die angegebene Datei nicht finden
;)



EDIT: Die Datei ist da... :( Aber wieso kann das System die Datei nicht finden?
(siehe Screen2 und 3)
Habe es auf F:\ verlegt, um zu sehen ob es vlt. keinen Zugriff auf die Datei gibt, aber trzdem die Probleme :(

EDIT 2:
Alles erledigt! Habe Dateipfad kopiert und Datei hieß script.bat.bat also 2x.
Danke für die Hilfe! :)
 

Anhänge

  • c#-fehler2.png
    c#-fehler2.png
    133,3 KB · Aufrufe: 512
  • c#-fehler3.png
    c#-fehler3.png
    61 KB · Aufrufe: 563
Zuletzt bearbeitet:
ot:
Ich mag mich irren, aber ein Problem hierbei ist, dass maxmueller die "Dateiendung bei bekannten Dateitypen ausblenden" dringend ausschalten sollte. Wer programmiert, sollte mit klaren Angaben arbeiten, und nicht dem System überlassen, wie eine Datei tatsächlich heisst. Nur so als Tip am Rande, falls das wie gesagt überhaupt zutrifft. Doch genau der Fehler passiert häufig beim bearbeiten/speichern von Dateien, wenn man aus Gewohnheit den vollen Dateinamen samt Endung beim Speichern einträgt.
 
@Threepwood:
So OT ist das gar nicht, denn das ist auch mir schon passiert, obwohl ich wirklich alles anzeigen lasse, sogar die als "Superhidden" markierten Dateien.
Da sucht man wie ein Affe einen nicht vorhandenen Fehler im Programm, dabei ist es im Endeffekt so etwas Banales.
 
Oben