启动没有停靠图标的OSX进程

时间:2015-09-29 22:58:33

标签: c# macos unity3d mono dock

我有两个Unity3D应用程序 - 一个由另一个启动,在启动的应用程序上使用-batchmode参数,因此它没有图形。

在Mac OSX上,启动的进程仍会获得一个停靠在那里的停靠图标;点击它什么都不做,因为它是非图形的,我真的想删除它。

我尝试使用LSUIElement条目修改Info.plist以摆脱停靠图标。如果我自己启动应用程序,那将非常有效,但当我将其作为一个过程启动时,它仍会获得一个停靠图标。

我的流程启动代码有点不寻常,无法提供帮助。这适用于Windows和Linux,但不适用于OSX,我不确定为什么(C#,单声道):

ProcessStartInfo proc = new ProcessStartInfo();
proc.FileName = path + filename;
proc.WorkingDirectory = path;
proc.Arguments = commandlineFlags;
process = Process.Start(proc);

我只是通过此特定设置在OSX上启动它:

ProcessStartInfo startInfo = new ProcessStartInfo("open", "-a '" + path + filename + "' -n --args " + commandlineFlags);
startInfo.UseShellExecute = false;
process = Process.Start(startInfo);

2 个答案:

答案 0 :(得分:1)

如果您尚未使用MonoMac或旧版open-source version或商业版(Xamarin.Mac),则需要encodeURIComponent()

在Unity应用程序中,您将从第一个应用程序作为“子流程”启动,向MonoMac添加项目引用并为MonoMac添加using子句:

using MonoMac;

然后在静态主函数中:

MonoMac.AppKit.NSApplication.Init ();
MonoMac.AppKit.NSApplication.SharedApplication.ActivationPolicy = MonoMac.AppKit.NSApplicationActivationPolicy.Accessory;

这将隐藏Dock和任务切换器中的应用程序/进程...当然,如果您在Windows / Linux上运行,则可以有条件地跳过该代码。

答案 1 :(得分:1)

回答我自己的问题,但将这些问题添加到ProcessStartInfo中删除了停靠栏图标:

startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;

我不确定两者是否真的需要,但似乎没有任何伤害。

似乎也需要PList编辑。具体来说,我正在补充:

<key>LSBackgroundOnly</key>
<string>1</string>

找到here