2016-03-24 8 views
1

Dies ist mein Code. Die Eingabebefehlszeile ist var1 val1 var2 val2:So entfernen Sie den exe-Teil der Befehlszeile

var rawCmd = Environment.CommandLine; 
// Environment.CommandLine adds the .exe info that I don't want in my command line: 
// rawCmd = "path\to\ProjectName.vshost.exe" var1 val1 var2 val2 

// A. This correction makes it work, although it is pretty ugly: 
var cleanCmd = rawCmd.Split(new string[] { ".exe\" " }, StringSplitOptions.None)[1]; 

// B. This alternative should be cleaner, but I can't make it work: 
var exePath = System.Reflection.Assembly.GetCallingAssembly().Location; 
cleanCmd = rawCmd.Replace(string.Format($"\"{exePath}\" "), ""); 

So B Arbeit zu machen, soll ich in der Lage sein, die .vhost.exe Infos zu finden (was ich nicht in der Lage bin zu finden).

Aber auch ich würde gerne wissen, ob es eine sauberere Möglichkeit gibt, all dies zu tun.


Was der Grund, warum ich diese erreichen wollen, hier ist die Erklärung (tl; dr: eine json von der Kommandozeile Parsen): https://stackoverflow.com/a/36203572/831138

+2

Warum können Sie nicht einfach den 'args' -Parameter, der an Ihre' Main'-Methode übergeben wurde, an einem geeigneten Ort speichern? –

+0

Warum handelt es sich bei der Befehlszeile um eine einzelne "Zeichenfolge"? Nach meinem Verständnis werden die Argumente bereits als Array geliefert, wie [hier] beschrieben (https://msdn.microsoft.com/en-us/library/cb20e19t.aspx). – Codor

+0

Der Grund ist das Beispiel, das ich am Ende des Beitrags verlinkt habe: http://StackOverflow.com/a/36203572/831138. Das Ziel besteht darin, einen JSON von der Befehlszeile aus zu analysieren. –

Antwort

2

Statt

der Verwendung
var rawCmd = Environment.CommandLine; 

können Sie verwenden:

var rawCmd = Environment.CommandLine; 
var argsOnly = rawCmd.Replace("\"" + Environment.GetCommandLineArgs()[0] + "\"", ""); 

Thi s wird in Ihrem Beispiel "var1 val1 var2 val2" zurückgeben. Und es sollte mit dem JSON-Beispiel in dem anderen Post funktionieren.

+0

Aber das wird die Anführungszeichen aus der Eingabe json entfernen, und ich kann es nicht analysieren. –

+0

Zeigen Sie mir ein echtes Beispiel dafür, wie Ihre Befehlszeile beim Ausführen der Anwendung aussieht. –

+0

Sie können einen anderen Beitrag http://stackoverflow.com/a/36203572/831138 ansehen. Dieser andere Beitrag hat meine aktuelle Frage ausgelöst und enthält alle Details zum Beispiel. Bottom line: Ich möchte in der Lage sein, einfach json in die Befehlszeile von vs2015 einzugeben und es "unberührten" innerhalb des Codes zu bekommen. –

0

ich einen Weg gefunden haben den vHost Weg zu bekommen:

var exePath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, System.AppDomain.CurrentDomain.FriendlyName); 

... obwohl ich Angst habe, es zu Inkonsistenzen je nachdem, wo der Code (Debug/Produktion ...) ausgeführt führen könnte. Ich hoffe nicht, ich muss weiter testen.

0

Wenn die Anzahl der Räume zwischen den Elementen ist nicht wichtig, können Sie Join nur das Argument Array, das auf nicht notierte Leerzeichen aufgeteilt wird, und enthält nicht die ausführbare Datei:

void Main(string[] args) 
{ 
    var cleanCmd = string.Join(" ", args); 
    // etc 
} 
+0

Aber das wird die Anführungszeichen von der Eingabe json entfernen, und ich kann es nicht analysieren. –

Verwandte Themen