在没有停靠图标的情况下启动 OSX 进程
Launching an OSX process without a dock icon
我有两个 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);
您将需要 MonoMac for this if you are not already using it, either the older open-source version 或商业版 (Xamarin.Mac)。
在您作为 'sub-process' 从第一个应用启动的 Unity 应用中,添加对 MonoMac 的项目引用并为 MonoMac 添加 using 子句:
using MonoMac;
然后在你的静态 Main 函数中:
MonoMac.AppKit.NSApplication.Init ();
MonoMac.AppKit.NSApplication.SharedApplication.ActivationPolicy = MonoMac.AppKit.NSApplicationActivationPolicy.Accessory;
这将从停靠栏和任务切换器中隐藏 application/process...当然,如果您在 Windows/Linux 上 运行,您可以有条件地跳过该代码。
回答我自己的问题,但将这些添加到 ProcessStartInfo 会删除停靠栏图标:
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
我不确定是否真的需要两者,但似乎没有任何危害。
似乎还需要对 PList 进行编辑。具体来说,我要添加:
<key>LSBackgroundOnly</key>
<string>1</string>
已找到 here。
我有两个 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);
您将需要 MonoMac for this if you are not already using it, either the older open-source version 或商业版 (Xamarin.Mac)。
在您作为 'sub-process' 从第一个应用启动的 Unity 应用中,添加对 MonoMac 的项目引用并为 MonoMac 添加 using 子句:
using MonoMac;
然后在你的静态 Main 函数中:
MonoMac.AppKit.NSApplication.Init ();
MonoMac.AppKit.NSApplication.SharedApplication.ActivationPolicy = MonoMac.AppKit.NSApplicationActivationPolicy.Accessory;
这将从停靠栏和任务切换器中隐藏 application/process...当然,如果您在 Windows/Linux 上 运行,您可以有条件地跳过该代码。
回答我自己的问题,但将这些添加到 ProcessStartInfo 会删除停靠栏图标:
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
我不确定是否真的需要两者,但似乎没有任何危害。
似乎还需要对 PList 进行编辑。具体来说,我要添加:
<key>LSBackgroundOnly</key>
<string>1</string>
已找到 here。