6

我有一个可以使用当前用户或 root 权限启动的应用程序。

事实上,应用程序有可能同时运行两次——一次在当前用户下运行,一次以 root 身份运行。

我喜欢在应用程序在 root 下运行时通知用户。目前,我在它的窗口标题中显示它,但我更愿意更改应用程序的名称,以便它在适当的地方显示“Appname (Root)”。这样,该名称将同时出现在菜单栏和 Dock 中,并带有此“根”信息,并且允许用户判断 Dock 中的两个应用程序实例中的哪一个是根版本。

有人知道应用程序名称是否可以通过代码更改,即应用程序本身或其启动器?

如果不是,我唯一的选择似乎是在 Dock 图标上添加一个标记为“root”的徽章,但这是我最后的选择,因为它不适用于菜单栏或其他显示应用程序名称的工具(即其他应用程序启动器,例如 DragThing)。

4

3 回答 3

7
…至少在概念上至少有五个应用程序名称:(1)Finder 看到的文件名,在应用程序包的情况下是包(捆绑)名称;(2) 包内可执行文件的名称, (3) 在很多地方使用的长名称,仅用于显示目的;(4)作为应用程序菜单标题的短名称,以及其他一些长名称不适合显示的地方;(5)正在运行的应用程序的进程名。它们并不总是相同的,尤其是在 Microsoft 和 Adob​​e 产品中。

—<a href="http://web.archive.org/web/20071016195218/http://www.cocoabuilder.com/archive/message/cocoa/2003/8/24/2349" rel="nofollow noreferrer" >比尔·奇斯曼

据我所知,dock 中的名称是 filesystem 上的应用程序包(无“.app”)的名称

info.plist 中键下的值CFBundleName是 menubar 中显示的值。

据我所知,在运行时更改这些都不行……但是您可以做的是在面向用户的 .app 包中拥有两个版本的应用程序,一个根版本和非根版本。当面向用户的应用程序启动时,它会检查它是否以 root 身份运行,并启动具有所需CFBundleName文件名的真实应用程序的适当副本。

我希望我知道一个更优雅的解决方案。

于 2009-12-17T03:35:18.707 回答
0

该标签来自您的 Info.plist,我认为它在发布后不会再被咨询过。如果您希望有一个父应用程序在修改其 Info.plist 后只启动真正的应用程序(可能从其自己的包中),那么这可能会给您带来您希望的效果。不过,您会在启动时看到两个图标弹跳。

于 2009-12-17T03:16:17.937 回答
0

OS X 应用程序通常不会与多个实例一起运行。以 Apple 开发的任何应用程序为例。允许多个文档/窗口更为常见,在这种情况下,每个窗口都可以是根窗口或非根窗口。

然而,允许 root 身份验证的最常见方法是有一个挂锁图标,可以单击该图标以切换到带有密码提示的 root 模式,这可以在许多系统偏好设置面板中看到。

于 2009-12-17T03:35:44.543 回答