如何在用户登录时以编程方式启动应用程序?

How to programmatically start an application at user login?

我第一次尝试将 C# Windows 应用程序移植到 macOS 12 Monterey。它的一项功能是设置自动启动,这是通过 Windows 注册表完成的。我发现在 macOS 上这是通过 launchd/launchctl 完成的,所以我尝试先手动设置它。我已使用以下配置将 .plist 文件添加到 /Library/LaunchAgents 文件夹:

<plist version="1.0">
 <dict>
   <key>Label</key>
   <string>application</string>
   <key>RunAtLoad</key>
   <true />
   <key>Program</key>
   <string>/Users/user/Desktop/osx-x64/application</string>
  </dict>
</plist>

我试图通过带有 launchctl load /Users/user/Library/LaunchAgents/application.plist 的终端启用此配置,但是总是抛出 Load failed: 5: Input/output error。发现它是一个已弃用的函数,我尝试使用此文件 launchctl kickstart,结果是 Could not find service "application" in domain for user gui: 501。这可能与文件权限有关吗?

我找到的关于此的大部分信息都指的是不再存在的文档,因此任何有关如何在 Monterey 上实现自动启动的信息都将不胜感激。

Input/output 错误表示您提供的 .plist 文件在 xml 方式或目标方式中不正确。

您可以阅读所有这些内容 here,我只会 post 一些建议,这些建议应该对这种特定情况有所帮助。其中一些不是完成这项工作所必需的,但相信我,最好还是留在他们身边。

  1. 使用完整的 xml header。 (上面网站上的例子)
  2. 标签值必须与plist文件名相同。它也几乎总是一个 bundle id。所以,设为com.my.application.plist,Label字段的值应该是com.my.application
  3. 不要在不需要的地方做空格,例如真/,不真/
  4. 程序路径应该是unix二进制的路径。尝试一下,如果您可以使用此路径从终端启动您的应用程序 /Users/user/Desktop/osx-x64/application 如果不是,您需要先解决这个问题。

这应该适合你。