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 user profile iconChristian 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:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        // Zusammenfassung:
        //     Gets or sets the set of command-line arguments to use when starting the application.
        //
        // Rückgabewerte:
        //     File type–specific arguments that the system can associate with the application
        //     specified in the System.Diagnostics.ProcessStartInfo.FileName property. The
        //     default is an empty string (""). The maximum string length is 2,003 characters
        //     in .NET Framework applications and 488 characters in .NET Compact Framework
        //     applications.


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