Process.Start(app,args);
を使用してブラウザを起動するためのc#コードを記述しようとしています。ここで、appsはブラウザへのパスです。 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
および引数は--no-default-browser-check
もしそうなら、これはWindowsとLinuxで動作します
Process.Start("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","--no-first-run");
私は得る
open: unrecognized option `--no-first-run'
Usage: open [-e] [-t] [-f] [-W] [-n] [-g] [-h] [-b <bundle identifier>] [-a <application>] [filenames]
Help: Open opens files from a Shell.
By default, opens each file using the default application for that file.
If the file is in the form of a URL, the file will be opened as a URL.
Options:
-a Opens with the specified application.
-b Opens with the specified application bundle identifier.
-e Opens with TextEdit.
-t Opens with default text editor.
-f Reads input from standard input and opens with TextEdit.
-W, --wait-apps Blocks until the used applications are closed (even if they were already running).
-n, --new Open a new instance of the application even if one is already running.
-g, --background Does not bring the application to the foreground.
-h, --header Searches header file locations for headers matching the given filenames, and opens them.
私も試しました Monobjc でコードを実行してみました
// spin up the objective-c runtime
ObjectiveCRuntime.LoadFramework("Cocoa");
ObjectiveCRuntime.Initialize();
NSAutoreleasePool pool = new NSAutoreleasePool();
// Create our process
NSTask task = new NSTask();
NSPipe standardOut = new NSPipe();
task.StandardOutput = standardOut;
task.LaunchPath = @"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome";
// add some arguments
NSString argumentString = new NSString("--no-first-run");
NSArray arguments = NSArray.ArrayWithObject(argumentString);
task.Arguments = arguments;
// We should have liftoff
task.Launch();
// Parse the output and display it to the console
NSData output = standardOut.FileHandleForReading.ReadDataToEndOfFile;
NSString outString = new NSString(output,NSStringEncoding.NSUTF8StringEncoding);
Console.WriteLine(outString);
// Dipose our objects, gotta love reference counting
pool.Release();
しかし、NUnitを使用してコードを実行すると、NUnitが爆発します。
これはバグだと思いますが、証明することはできません。私はすべての助けに感謝します!
Process.Startでファイルを開くためにOSのメカニズムを使用する代わりに、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
は open コマンドラインユーティリティを使用して起動するようです。
実行可能ファイルを直接呼び出すことは避けてください。アプリケーションがすでに実行されている場合、これは、すでに実行されているインスタンスをアクティブ化する代わりに、その2番目のインスタンスを起動します。それはおそらくあなたが望むものではなく、とにかくすべてのアプリケーションがこれを処理できるわけではありません。
Openの場合、起動する構文はChrome
open -a Chrome
MacOS XでProcessクラスがどのように機能するかはわかりませんが、パラメータは類似しているはずです。
Webページを開くだけの場合は、実行可能ファイルを指定しないでください。代わりに、URLを渡すだけで、ユーザーのデフォルトのブラウザで開かれます。これはすべてのプラットフォームに有効です。
Process.Start("http://www.google.com");
パラメータを個別に渡すのではなく、プロセス名に連結するようなことを試しましたか?
var processName = "/ Applications/Google Chrome.app/Contents/MacOS/Google Chrome"; var args = "--no-default-browser-check"; Process.Start(String.Format( "{0} {1}"、processName、args));
なぜあなたはこのようなことを試してはいけません:
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();