C# Programm mit Parametern staren

nierewa

Lt. Junior Grade
Registriert
Juni 2008
Beiträge
414
Hallo,

ich möchte aus einem Ordner alle PDF Dateien mittels Kyocera NetDirectPrint drucken.
Man kann das Programm im Schema
Code:
KMDP.exe "pdffile.pdf" /s "default.bin"
über die cmd aufrufen.

Ich hab versucht das Programm gleich zu starten und zwar so:
C#:
foreach (var fn in Directory.GetFiles(sourcePath, "*.pdf"))
                          {
                 
                    // alle PDF Dateien mit C:\Program Files (x86)\Kyocera\NetDirectPrint\KMDP.exe drucken.
                    fileName = System.IO.Path.GetFileName(fn);

                    //KMDP.exe "pdffile.pdf" /s "default.bin"
                    Process.Start("C:\\Program Files (x86)\\Kyocera\\NetDirectPrint\\KMDP.exe" + fileName);
             
                           // die Datei danach löschen
                    System.IO.File.Delete(fn);
                          }

Ich erhalte jedoch eine Fehlermeldung das die Datei nicht gefunden werden kann.

Code:
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)
   bei System.Diagnostics.Process.Start(String fileName)
   bei P2D.Program.MyNotifyIconApplication.t1_Tick(Object sender, EventArgs e) in Z:\User\Desktop\Visual C# Programming\P2D\VisualStudio Projekt - Zuarbeit\Zuarbeit\Program.cs:Zeile 47.
   bei System.Windows.Forms.Timer.OnTick(EventArgs e)
   bei System.Windows.Forms.Timer.TimerNativeWindow.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.8.4420.0 built by: NET48REL1LAST_C.
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll.
----------------------------------------
P2D
    Assembly-Version: 1.0.7984.25715.
    Win32-Version: 1.0.7984.25715.
    CodeBase: file:///Z:/User/Desktop/Visual%20C%23%20Programming/P2D/VisualStudio%20Projekt%20-%20Zuarbeit/Zuarbeit/bin/Debug/P2D.exe.
----------------------------------------
System
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.8.4360.0 built by: NET48REL1LAST_C.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll.
----------------------------------------
System.Configuration
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.8.4190.0 built by: NET48REL1LAST_B.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll.
----------------------------------------
System.Core
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.8.4390.0 built by: NET48REL1LAST_C.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll.
----------------------------------------
System.Xml
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.8.4084.0 built by: NET48REL1.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll.
----------------------------------------
System.Windows.Forms
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.8.4400.0 built by: NET48REL1LAST_C.
    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.8.4390.0 built by: NET48REL1LAST_C.
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
----------------------------------------
System.Windows.Forms.resources
    Assembly-Version: 4.0.0.0.
    Win32-Version: 4.8.4084.0 built by: NET48REL1.
    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.8.4084.0 built by: NET48REL1.
    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.

Lasse ich fileName weg, wird KMDP.exe normal gestartet, also scheint die Parameterübergabe nicht zu funktionieren.
Kann mir jemand helfen und mir sagen wie ich das Programm mit Übergabe des Dateinamens starte?

Wäre vielleicht ein Umweg über Starten der cmd mit benötigten Angaben
Code:
KMDP.exe "pdffile.pdf" /s "default.bin"
besser?
 
Kann mir gut vorstellen, das die Datei nicht in diesem Pfad liegt wo das Programm ausgeführt wird. Versuch es mal mit dem absoluten.

Habt recht, da fehlt was.
 
Zuletzt bearbeitet:
In der Zeile mit dem Process.Start hängst du den Filename direkt an den Exe Namen der KMDP.exe an.
Da kommt also ...KMDP.exeirgendwas.pdf raus. Wenigstens das Leerzeichen muss dazwischen sein.
Besser wäre, die Argumente als Parameter an Process.Start mitzugeben.
 
Du solltest auch darauf warten, dass der Prozess zu Ende ist bevor du die Datei löschst. Aktuell kann es passieren, dass die Datei gelöscht wird und der Prozess noch am Starten ist.
 
Danke.
So funktioniert es: Process.Start(String, String)

Du solltest auch darauf warten, dass der Prozess zu Ende ist bevor du die Datei löschst. Aktuell kann es passieren, dass die Datei gelöscht wird und der Prozess noch am Starten ist.
Das scheint wirklich so zu sein. Ich bekomme die Meldung: Das System kann die Datei nicht öffnen
Wie stelle ich das an das die Datei erst gelöscht wird, wenn sie dem Drucker übergeben wurde?
 
Hab es hin bekommen. So funktioniert es wie gewünscht:

C#:
foreach (var fn in Directory.GetFiles(sourcePath, "*.pdf"))
{
    // alle PDF Dateien mit C:\Program Files (x86)\Kyocera\NetDirectPrint\KMDP.exe drucken.
   fileName = System.IO.Path.GetFileName(fn);

   proc = targetPath;
   param = "\"" + sourcePath + "\\" + fileName + "\" /s " + "\"" + binpfad + "\"";

   Process p = new Process();
   p = Process.Start(proc,param);
   p.WaitForExit();

   // die Datei danach löschen
  System.IO.File.Delete(fn);
}
 
Hä?
 
Du startest einen (Hintergrund-)Prozess, dem Du damit Systemressourcen gibst, die Du aber nicht wieder freigibst.
 
Hallo.
Na ja, der Process muß doch auch immer laufen falls wieder eine PDF-Datei im entsprechend gewählten Verzeichnis gespeichert wird. Oder verstehe ich Dich falsch.

Ich programmiere eigentlich nicht, das ist erst das zweite mal Visual C# :rolleyes:
 
Du wartest doch auf das Ende vom Prozess, danach gibst du die Ressourcen wieder frei via Dispose, in der nächsten Runde deiner Schleife baust du ja wieder ein neues Prozess Objekt auf.
 
Mache ich das einfach mit p.Dispose(); ?
 
Besser wäre es, dein Process Objekt mit einem using-Block zu verwenden. Hat den Vorteil, dass Dispose() auch im Exception-Fall aufgerufen wird.

C#:
 using (Process p = new Process())
 {
      //do sth
      p.WaitForExit();
 }

wäre äquivalent zu:

C#:
Process p = null;
try
{
   p = new Process();
   //do sth
   p.WaitForExit();
}
finally
{
  p.Dispose();
}
 
  • Gefällt mir
Reaktionen: KitKat::new()
Danke :D
 
Zurück
Oben