我有以下代码:
if (BrowserName.ToUpper().Contains("FIREFOX"))
privateModeParam = " -private-window";
string extraspeech = "\"";
string both = BrowserName + extraspeech + privateModeParam;
Process.Start(both, URLFromDB);
当它运行时,它返回以下值:
BrowserName = "c:\\program files\\mozilla firefox\\firefox.exe"
both = "c:\\program files\\mozilla firefox\\firefox.exe\" -private-window"
privateModeParam = " -private-window"
我需要做的是,从\
字符串修剪both
,因为它不能用反斜杠打开firefox。
我应该添加,如果我只是这样做:
string both = BrowserName + privateModeParam;
返回的值是“c:\ program files \ mozilla firefox \ firefox.exe \ -private-window” 什么不会打开Firefox
答案 0 :(得分:4)
导致问题的原因是双引号("
),而不是反斜杠。字符串中的这个位置没有反斜杠,它只是由调试器显示,因为c#使用\
来转义字符串文字中的"
之类的东西。
所以你的问题似乎是忘了在可执行文件之前添加extraspeech
:
string both = extraspeech + BrowserName + extraspeech + privateModeParam;
或更好
string both = $"\"{BrowserName}\" {privateModeParam}"; // C#6
string both = string.Format("\"{0}\" {1}", BrowserName, privateModeParam); // pre C#6
更新:
但这里真正的问题似乎是你在fileName
参数中传递了一个命令行参数,而在arguments
参数中传递了一个。
你应该像这样呼叫Process.Start
:
Process.Start(BrowserName, $"{privateModeParam} {URLFromDb}");
只需传递arguments
参数旁边的所有参数即可。然后也不需要将可执行文件包装在双引号中,因为它是fileName
参数中唯一的字符串。有关Process.Start()
的参数的详细信息,请参阅MSDN。
答案 1 :(得分:0)
if (BrowserName.EndsWith("\\")){
BrowserName = BrowserName.Substring(0, BrowserName.Length - 1);
}
或
both = both.Replace("\\\"", "");
可以解决您的问题
答案 2 :(得分:0)
最简单的方法是使用Substring: MyString = MyString.Substring(0,MyString.Length - 1);