C# 如何在Mac上与Mono一起使用Process.Start()或等效程序并传入参数
我正在尝试编写一些c代码来使用C# 如何在Mac上与Mono一起使用Process.Start()或等效程序并传入参数,c#,macos,mono,C#,Macos,Mono,我正在尝试编写一些c代码来使用Process.start(app,args)启动浏览器其中apps是指向浏览器的路径,例如/Applications/Google Chrome.app/Contents/MacOS/Google Chrome,args是——无默认浏览器检查 如果有,在Windows和Linux上哪个有效 Process.Start("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","--no-first
Process.start(app,args)启动浏览器
其中apps是指向浏览器的路径,例如/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
,args是——无默认浏览器检查
如果有,在Windows和Linux上哪个有效
Process.Start("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","--no-first-run");
我明白了
但当我使用NUnit运行代码时,它会导致NUnit崩溃
我怀疑这是一个错误,但无法证明它。我感谢所有的帮助 你为什么不试试这样的东西:
Process P = new Process();
P.StartInfo.FileName = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome";
P.StartInfo.Arguments = "--no-default-browser-check";
P.UseShellExecute = false;
P.Start();
您是否尝试过将参数连接到进程名称中,而不是将其分开传递 var processName = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"; var args = "--no-default-browser-check"; Process.Start(String.Format("{0} {1}", processName, args)); var processName=“/Applications/Google Chrome.app/Contents/MacOS/Google Chrome”; var args=“--无默认浏览器检查”; Process.Start(String.Format(“{0}{1}”,processName,args));
看起来,
进程
使用命令行实用程序启动
您应该避免直接调用可执行文件。如果应用程序已经在运行,这将启动它的第二个实例,而不是激活已经运行的实例。这可能不是您想要的,而且并非所有应用程序都能处理这一问题
使用open,启动Chrome的语法将是
open -a Chrome
我不知道Process类在MacOS X上是如何工作的,但我假设参数应该类似
注意,如果您只想打开一个网页,则不应指定可执行文件;相反,只需传递URL,就可以在用户的默认浏览器中打开它。这对任何平台都有效
Process.Start("http://www.google.com");
要使Process.Start直接使用exec而不是使用操作系统的机制打开文件,必须将UseShellExecute设置为false。在Linux和Windows上也是如此
Process.Start(new ProcessStartInfo (
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
"--no-first-run")
{ UseShellExecute = false });
请注意,您还可以对您的用例使用“open”,以正确运行Chrome应用程序包。使用“-a”参数强制它运行特定的应用程序,“-n”参数打开新实例,“--args”传递参数:
Process.Start(new ProcessStartInfo (
"open",
"-a '/Applications/Google Chrome.app' -n --args --no-first-run")
{ UseShellExecute = false });
从命令行运行该命令有效吗?是的。从我看到的情况来看,Process.Start()应该使用exec来运行应用程序,而不是open。创建一个使用所需命令行运行Chrome的脚本并通过Mono运行该脚本怎么样?不幸的是,这与我之前看到的结果相同。谢谢你给它一个gotried,但是当启动它时,它会重新确认参数,并且仍然显示相同的问题。不幸的是,我需要传入一个参数,因为我需要加载带有扩展的Chrome。仅当启动浏览器时使用参数指定扩展时,Chrome才会加载扩展。
Process.Start(new ProcessStartInfo (
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
"--no-first-run")
{ UseShellExecute = false });
Process.Start(new ProcessStartInfo (
"open",
"-a '/Applications/Google Chrome.app' -n --args --no-first-run")
{ UseShellExecute = false });