Ich arbeite an einer Lösung in Visual Studio 2010 Ultimate, die zwei C#-Projekte enthält: ein Forms-Projekt und ein Konsolenprojekt. Programmtechnisch sind sie völlig getrennt; der Hauptteil der beiden Projekte könnte ohne das andere laufen. Ich möchte die Konsolenanwendung durch Drücken einer Schaltfläche in der Forms-Anwendung aufrufen, wobei bestimmte Optionen auf der Grundlage der Forms-Anwendung festgelegt werden sollen. Man kann sich die Forms-Anwendung also im Wesentlichen als eine Art "Launcher" vorstellen.
Die Art und Weise, wie ich dies im Moment implementiert habe, ist die Verwendung von System.Diagnostics.Process.Start
con "cmd"
als ersten Parameter und den Pfad zur ausführbaren Datei der Konsolenanwendung (plus CLI-Argumente) als zweiten Parameter. Dies ist jedoch eine schreckliche Lösung, da sie nicht funktioniert, wenn sie auf anderen Rechnern mit einem Installationsprogramm eingesetzt wird.
Ich habe auch versucht, einen Verweis auf das Konsolenprojekt im Forms-Objekt zu erstellen, indem ich Program
im Konsolenprojekt öffentlich und statisch, und der Aufruf des Konsolenprojekts Main
Methode, aber da es kein gültiges Ausgabehandle gibt, führt dies schließlich zu einer Ausnahme, die ausgelöst wird.
Ich habe viel gegoogelt, etwas hier auf SO gesucht und sogar die "Ähnliche Fragen" auf der Anmeldeseite überprüft, und niemand scheint zu wissen, wie man das macht, was ich machen will. Hat jemand einen Tipp, der mich auf den richtigen Weg bringt?
FYI: Ich weiß, dass es wahrscheinlich zehn Millionen bessere Möglichkeiten gibt, dies zu tun, aber ich habe mehrere Gründe dafür, dass ich es auf diese Weise tun möchte und muss. Ich weiß, ich könnte einfach eine separate GUI für das CLI-Programm erstellen und den entsprechenden Code rüberkopieren, oder alles in ein Projekt zusammenführen und ein separates Ausgabefenster erstellen, oder verschiedene andere Lösungen wie diese. Aber ich brauche diese Lösung aus zwei Gründen: (1) Ich hatte ein ziemlich komplexes CLI-Programm, das gut als CLI-Programm funktioniert, und brauche nun eine benutzerfreundliche Möglichkeit, es zu starten, und (2) die Lösung des Problems auf andere Weise beantwortet nicht die Frage: "Warum sollte man sich überhaupt die Mühe machen, mehrere ausführbare Projekte in derselben Lösung zu haben, wenn man nicht eines aus dem anderen aufrufen kann?"