我正在尝试使用我的托盘应用程序完成以下操作:
- MyApp.app 应该在崩溃时重新启动
- MyApp.app 不应在用户登录时启动(即用户必须手动启动应用程序)
我有一个问题,如果用户手动启动应用程序,那么列表中
launchctl list com.myapp
不会显示正在运行的应用程序。
但是,如果我让 LaunchAgent 在用户登录时启动应用程序,然后launchctl list com.myapp
正确显示该应用程序,并将在崩溃(或任何非零退出代码)时重新启动它。
奇怪的是,如果用户手动启动应用程序,launchd 会在几分钟后尝试启动它自己的实例。我什至无法解释为什么会发生这种情况。
我的 LaunchAgent plist 示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
<key>AfterInitialDemand</key>
<true/>
</dict>
<key>RunAtLoad</key>
<false/>
<key>Label</key>
<string>com.myapp</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/MyApp.app/Contents/MacOS/MyApp</string>
</array>
</dict>
</plist>