禁用自行运行的启动项


9

我发现有一些应用似乎可以在启动时启动,尽管它们没有出现在通常的地方...

- Login Items (in the Users preference pane)
- /Library/LaunchAgents
- /Library/LaunchDaemons
- /Library/StartupItems
- /System/Library/LaunchAgents
- /System/Library/LaunchDaemons
- /System/Library/StartupItems
- ~/Library/LaunchAgents
- ~/Library/LaunchDaemons
- ~/Library/StartupItems

至少其中一些应用程序(例如,来自Mac App Store的Day One和Pauses)似乎正在从其自己的内部LoginItems文件夹中启动一项:

/Applications/Day One.app/Contents/Library/LoginItems/Day One Reminders.app
/Applications/Pauses.app/Contents/Library/LoginItems/PausesLauncher.app

作为良好的公民,两个应用程序都允许您禁用登录时启动行为,但是令人不安的是,这种行为似乎无法从系统范围内进行控制,我希望有一种系统地识别/控制行为的方法这些登录项。因此,(分为两部分)问题是:

  • 究竟是什么控制着这些/特定于应用程序的启动项目是否/如何被激活,以及
  • 如何获得所有这些登录项目的清单?

[为清晰起见,2013年3月20日11:22 PT编辑]



您为什么认为它不是重复的(有助于防止再次获得相同的答案)?我认为您在使用特定应用程序时会遇到这种情况,能否在问题中列出它们?
nohillside

而且我认为您正在误解第一天的事情。您上面列出的内容只是Reminder应用程序(菜单),如果选中“登录时启动”,它确实会启动。这不是沙盒中的LaunchAgents / Daemons文件夹。
nohillside

感谢您的澄清。我可能对诊断有误,但这是我在观看带有的“禁用”操作时看到活动的地方fs_usage,所以我认为那是发生了什么。

而且,这不是骗人的,因为另一个问题已由我在问题开头列出的标准登录项列表回答。我看到发生这种情况的应用程序(包括第一天)没有出现在我的登录项或那些目录中……
2013年

Answers:


8

第一天似乎将登录项存储在/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist中:

$ /usr/libexec/PlistBuddy -c 'Print _com.apple.SMLoginItemBookmarks:com.dayoneapp.dayone-agent' /var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist
book 0(UserslaurTorrents
                        Day One.apContentsLibrary
LoginItemsDay One Reminders.app $4HXh?kld ????$A????H???A?1M?$5DF7A03E-A7FB-3E80-B61D-F10CD8BF7B5D?/?0c75ae904b0f99cb3a794e7360629c822a0f4a14;00000000;0000000000000020;com.apple.app-sandbox.read-write;00000001;01000002;0000000000641712;/users/lauri/torrents/day one.app/contents/library/loginitems/day one reminders.app??????D|@l 0 ? ? ? ?  0 <???????D

在同一文件中将其更改为true会禁用它:

<key>com.dayoneapp.dayone-agent</key>
<dict>
    <key>Disabled</key>
    <false/>
</dict>

1
很好-看起来就是答案。我仍然感到困惑,为什么它没有在任何明显的地方浮出水面:它不在“登录项”首选项窗格中(被允许,所有用户都需要有一个新部分)...不在任何启动文件夹中...甚至在临贡也没有。出于好奇,您怎么知道去哪里看?
2013年

第一次开放第一天时,我运行了fseventer
Lri

感谢您分享调查结果!有时,我还将fseventer用于FS监视应用程序。
porg

2

(这与“用户和组系统首选项”下用户可见的“登录项”无关)

埋在应用程序捆绑包中的Contents / Library / LoginItems /似乎是Apple沙盒应用程序方法的实现。

@ user495470中有关登录项引用在/var/db/launchd.db/中存储的提示现在似乎已在macOS 10.12中取消了

Apple的方向似乎是朝着应用程序自包含的方向发展,因为将来可能需要在某些时候对Mac应用程序进行沙箱处理(个人推测,并非事实),因此LaunchDaemons,LaunchAgents和StartupItems在将来可能会被禁止使用。另一方面,不建议使用CFPreferences API和发送AppleEvent来启动...

参考:

虽然过去很容易在上述文件夹中查找启动启动信息(每个Dan),但这种新的沙盒模型在理论上操作上更安全,但对所有普通用户和大多数超级用户隐藏了应用程序(或Trojan的)启动功能。谁知道在系统目录中查找。现在,找到这些隐藏的登录项已成为PITA(应用程序中的痛苦),您可以通过Applications文件夹进行查找,也可以手动打开在/ Contents / Library /中查找“ LoginItems”文件夹及其内容的应用程序捆绑包。对于用户级解决方案,我确实找到了一个工具,该工具列出了应用程序包内嵌的登录项,称为CleanMyMac。 (可以停用或激活它们。注意,请仅从公司购买此应用程序。有可用的破解版本实际上以与登录项目现在的工作方式非常相似的方式携带病毒(讽刺)。) CleanMyMac显示“登录项”选择器

并请注意,这些项(已启用或已禁用)如何不属于用户在“用户和组”系统偏好设置下可见的“登录项”:

如果您像我一样,并且正在代码级工作,请参阅综合实施指南(作者:Tim Schroeder,2013年):“登录时启动沙箱”项目

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.