• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

C# process.StartInfo.Arguments wird abgeschnitten?

Timon3

Team ModMii

Registriert
17 Juli 2013
Beiträge
499
Hallo,

ich arbeite momentan an einem GUI-Downloader für ein Projekt in C#.
Dabei sollen nicht nur Dateien heruntergeladen werden, sondern, da ich die veränderten Daten nicht verteilen darf, sollen die heruntergeladenen Dateien mittels Differenz-Dateien gepatcht werden. Ist ja eigentlich kein Problem, deshalb wollte ich dafür das Programm jptch mitliefern und dann aus meinem Programm heraus aufrufen. Dafür habe ich mir eine Funktion geschrieben:

Code:
private void jptch(string arguments)
        {
            Process p = new Process();
            p.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory();
            p.StartInfo.FileName = "jptch.exe";
            p.StartInfo.UseShellExecute = true;
            p.StartInfo.Arguments = arguments;
            p.Start();
            p.WaitForExit();
        }

Das ganze funktioniert auch super. Bis darauf, dass der Pfad, in dem das Programm liegt, nicht zu lang sein darf. Denn als Beispiel ist hier ein Funktionsaufruf:
Code:
jptch(textBox1.Text + @"\wad\Schritt 1 - IOS\IOS37-v5663.wad " + CurrDir + @"\extract\rodries\ios223.dif " + textBox1.Text + @"\wad\Schritt 2 - cIOS\IOS223[37]-v5.1R.wad");

Wenn ich das Programm von einem Ordner, dessen Pfad nur recht kurz ist, aufrufe, ist das ganze kein Problem, es wird ordentlich gepatcht. Wenn ich aber einen längeren Pfad habe, z. B. "C:\Users\User\Documents\Visual Studio 2012\Projects\ModMii-Test\ModMii-Test\bin\Release" klappt das ganze nicht, obwohl es theoretisch gehen müsste - denn eigentlich sollte der Prozessaufruf laut diesem Link bis zu 8192 Zeichen unterstützen. Tut er aber nicht.

Link schrieb:
If you are using the CMD.EXE command processor, then you are also subject to the 8192 character command line length limit imposed by CMD.EXE.

Jetzt ist die Frage: Warum ist das so? Kann mir da jemand auf die Sprünge helfen?
Wenn ihr mehr Code braucht, sagt Bescheid.

Vielen Dank im Voraus! :)
 

gerechtigkeit0

Renommierter Pestarzt™

Registriert
15 Juli 2013
Beiträge
337
Ich weiß nicht, ob dir das weiter hilft.
Aber ich stand mal vor einem "ähnlichen Problem" (VisualStudio mit .NET4).

Wollte auch eine externe EXE über mein Projekt aufrufen lassen. Das führte aber dazu, dass sich meine Anwendung beendete und so auch die externe Anwendung nicht gestartet wurde.

Mag vielleicht "dreckig" sein, aber ich habe das ganze lösen können, in dem ich den Prozessaufruf als eigenen Thread gestartet habe.

Ich muss zugeben: Von einer Zeichenbeschränkung beim Pfad wusste ich damals noch nichts. Aber vielleicht kannst du das trotzdem mal ausprobieren.

Hoffe ich konnte dir helfen ;)
 

Schinni999

Eat, Sleep, Code

Registriert
15 Juli 2013
Beiträge
404
Ort
Vor meinen Source Code
Kannst du mal schauen was nach Directory.GetCurrentDirectory() in p.StartInfo.WorkingDirectory steht? Außerdem im Debug Modus ist das aktuelle Directory das "bin\Debug" deines Projekts (sofern du es nicht änderst). Aber bei kurzen Pfad funktioniert es ja hast du gesagt.
 
Zuletzt bearbeitet:

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Wenn ich das Programm von einem Ordner, dessen Pfad nur recht kurz ist, aufrufe, ist das ganze kein Problem, es wird ordentlich gepatcht. Wenn ich aber einen längeren Pfad habe, z. B. "C:\Users\User\Documents\Visual Studio 2012\Projects\ModMii-Test\ModMii-Test\bin\Release" klappt das ganze nicht, obwohl es theoretisch gehen müsste - denn eigentlich sollte der Prozessaufruf laut diesem Link bis zu 8192 Zeichen unterstützen. Tut er aber nicht.

Länge der Argumente und die Länge des vollständigen Pfads dürfen zusammen nicht länger als 2080 sein.
 

Timon3

Team ModMii

Registriert
17 Juli 2013
Beiträge
499
  • Thread Starter Thread Starter
  • #5
@gerechtigkeit0: Hab ich gerade mal probiert, ändert aber leider überhaupt nichts. Aber Danke für den Vorschlag.

@Schinni999: Danach steht darin exakt derselbe Pfad wie der, in dem auch das Programm liegt. Daran liegt also nicht der Fehler. Und ich habe das auf Release stehen ;) aber auch dir Danke.

@KaPiTn: Ach so, ich habe gedacht, es gilt das, was da bei der CMD steht. Aber selbst, wenn ich den Pfad, in dem das Programm liegt, 5x übergeben würde (was ja bei weitem nicht gegeben ist, es wird nur 4x übergeben) komme ich gerade mal auf 528 Zeichen, was ja deutlich darunter liegt.

Ich habe mal den Standard-Output und den Standard-Error in eine Textbox umgeleitet, und da wurde der Pfad so abgeschnitten: "C:\Users\Timon\Documents\Visual "
Leider weiß ich nicht genau, ob das vom ersten oder zweiten Argument stammt, da jptch das nicht ausgibt.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Das Leerzeichen dürfte das Problem sein, weil dadurch umgebrochen und ein neue Parameter erwartet wird. Der Pfad muß in Anführungszeichen stehen. Da Du WerbatimString (@) benutzt, müstest Du diese dann mit doppeltem "" escapen.
 

Timon3

Team ModMii

Registriert
17 Juli 2013
Beiträge
499
  • Thread Starter Thread Starter
  • #7
Stimmt, das wird das Problem sein. Vielen Dank! :) Aber ich habe mich jetzt dazu entschieden, einfach einen etwas besseren Algorithmus direkt in den Code zu integrieren.
 
Oben