我有两个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);
答案 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。