2016-06-16 9 views
1

Ich habe den folgenden Code:Entfernen von Ende Wert

if (BrowserName.ToUpper().Contains("FIREFOX")) 
    privateModeParam = " -private-window"; 
string extraspeech = "\""; 
string both = BrowserName + extraspeech + privateModeParam; 
Process.Start(both, URLFromDB); 

, wenn es ausgeführt es gibt den folgenden Wert:

BrowserName = "c:\\program files\\mozilla firefox\\firefox.exe" 
both = "c:\\program files\\mozilla firefox\\firefox.exe\" -private-window" 
privateModeParam = " -private-window" 

Was ich tun muss, ist, schneiden die \ von both string, weil Firefox mit diesem Backslash nicht geöffnet wird.

sollte ich hinzufügen, wenn ich einfach tun:

string both = BrowserName + privateModeParam; 

der Wert zurückgegeben wird, ist "c: \ Programme \ Mozilla Firefox \ firefox.exe \ -privater-Fenster" was nicht öffnen Firefox

+1

warum verwenden Sie dann 'extrespeech'? benutze es einfach nicht. – Habib

+0

Ich denke, dass der zusätzliche Backslash hinzugefügt wird, weil Sie "Browser" hinzufügen, wenn Sie "beide" zuweisen. Könntest du da nicht einfach 'extrespeech' hinzufügen? – Andy

+0

Ich denke, es gibt ein Doppelzitat fehlt zu Beginn von 'c: \\ Programmdateien \\ Mozilla Firefox \\ firefox.exe" ' –

Antwort

4

Was Ihre Probleme verursacht, ist das doppelte Zitat ("), nicht der Back-Schrägstrich. Es gibt keinen umgekehrten Schrägstrich an dieser Position in der Zeichenfolge, es wird nur so von Ihrem Debugger angezeigt, weil C# \ verwendet, um Dinge wie " in String-Literalen zu entgehen.

So scheint das Problem zu sein, dass Sie extraspeechvor die ausführbare Datei hinzuzufügen vergessen, auch:

string both = extraspeech + BrowserName + extraspeech + privateModeParam; 

oder besser

string both = $"\"{BrowserName}\" {privateModeParam}"; // C#6 
string both = string.Format("\"{0}\" {1}", BrowserName, privateModeParam); // pre C#6 

aktualisieren:

Aber das eigentliche Problem scheint hier zu sein, dass Sie ein Befehlszeilenargument im Parameter fileName und einen über den Parameter arguments übergeben.

Sie sollten rufen tatsächlich Process.Start wie folgt aus:

Process.Start(BrowserName, $"{privateModeParam} {URLFromDb}"); 

einfach alle Argumente Seite passieren die arguments Parameter. Dann müssen Sie die ausführbare Datei auch nicht in doppelte Anführungszeichen setzen, da dies die einzige Zeichenfolge im Argument fileName ist. Weitere Informationen zu den Parametern zu Process.Start() finden Sie unter MSDN.

+0

Für beide dieser gibt es den Wert von" \ "c: \\ Programmdateien \ \ Mozilla Firefox \ \ Firefox.exe \ "-private-window" und es öffnet sich immer noch nicht Firefox – 4d554d424c4553

+0

@ 4d554d424c4553 aktualisiert meine Antwort, hoffe es hilft –

+0

Danke, das funktioniert jetzt. – 4d554d424c4553

0
if (BrowserName.EndsWith("\\")){ 
    BrowserName = BrowserName.Substring(0, BrowserName.Length - 1); 
} 

oder

both = both.Replace("\\\"", ""); 

kann Ihr Problem beheben

0

Der einfachste Weg, Substring zu verwenden wäre: MyString = MyString.Substring (0, myString.length - 1);

Verwandte Themen