Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Mac上与Mono一起使用Process.Start()或等效程序并传入参数_C#_Macos_Mono - Fatal编程技术网

C# 如何在Mac上与Mono一起使用Process.Start()或等效程序并传入参数

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

我正在尝试编写一些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-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 });