Autor Beitrag
Andreas#
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 19.09.10 15:40 
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:

ausblenden 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# Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 19.09.10 16:19 
Hallo, hab gerade folgendes über die Argumenteigenschaft gefunden:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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# Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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