Entwickler-Ecke
Basistechnologien - Prozess mit sehr langen Parametern starten
Andreas# - So 19.09.10 15:40
Titel: Prozess mit sehr langen Parametern starten
Hallo,
ich muss einer Anwendung sehr lange Parameter übergeben (ich möchte mit FreePDF mehrere PDF's zusammenfügen, wobei dabei pro pdf immer der komplette Pfad angegeben werden muss).
Mein Code sieht bisher so aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Process nPad = new Process(); nPad.StartInfo.FileName = FreePDF_Pfad; nPad.StartInfo.Arguments = Daten.ToString(); try { nPad.Start(); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(Daten.Length); return; } |
Der funktioniert auch wunderbar - solange die Länge der Parameter nicht etwa 2 kb überschreitet. Es kommt aber manchmal vor das die Parameter länger sein müssen (viele Pdfs zusammenfügen) - dann kommt es aber zu einer Exception mit der Message "Zugriff verweigert".
Ich bin mir sehr sicher das das Problem auf meiner Seite liegt und nicht bei Freepdf - ich hab freepdf.exe einmal durch eine einfache Anwendung von mir ersetzt, die nichts anderes macht als die übergebenen Parameter ausgeben - dabei trat das gleiche Problem auf. Gleichzeit muss es aber möglich sein dieses Problem zu lösen, denn es gibt auch das programm fpjoin.exe mit dem man über eine grafische Oberfläche die zusammenzufügenden PDF's auswählen kann. Dieses startet anschließend freepdf.exe - in diesem Fall meine ersetzte Anwendung wobei ich sehen konnte, dass wirklich die langen Parameter übergeben wurden.
Was muss ich in meinem Code ändern, damit das auch bei mir funktioniert?
Schonmal vielen Dank für eine Antwort,
viele Grüße
Andreas
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am So 19.09.2010 um 16:26
Andreas# - So 19.09.10 16:19
Hallo, hab gerade folgendes über die Argumenteigenschaft gefunden:
Das heißt dann wohl das ich diese Art des Prozessstartens nicht nehmen kann - gibt es dazu noch Alternativen?
Viele Grüße
Andreas
jaenicke - So 19.09.10 16:34
Mit Delphi habe ich mit der direkten CreateProcess-API auch über 4000 Zeichen lange Befehle benutzen können (ohne Unicode bis zu 3,7k ca.).
Ich vermute also, dass du mit direkter Einbindung der API-Funktion das unter Windows auch mit C# machen kannst.
Ralf Jansen - So 19.09.10 16:58
jaenickes Hinweis entsprechend solltest du dann mal bei deiner StartInfo Klasse UseShellExecute = false setzen. Dann benutzt die Process Klasse CreateProcess.
jaenicke - So 19.09.10 17:56
Das kann natürlich klappen, aber ich vermute einmal, dass dem Zitat aus der Doku nach zu schließen die Limitation eher immer bei der Klasse gilt. Aber probieren geht über studieren. :D
Andreas# - So 19.09.10 18:01
Hallo,
vielen Dank!!! - Hab direkt beides mal ausprobiert, da es mich mal interessiert hat wie man in C# Methoden anderer Programmiersprachen aufruft^^
Es funktionieren beide - von daher nochmals vielen Dank!
Viele Grüße
Andreas
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!