Macos 应用程序在系统重新启动时不启动

Macos 应用程序在系统重新启动时不启动,macos,launchd,launch-daemon,launch-agent,Macos,Launchd,Launch Daemon,Launch Agent,我创建了一个运行应用程序的LaunchDaemon服务 sudo launchctl load /Library/LaunchDaemons/com.testapp.plist 这是我的com.testapp.plist: 标签 com.testapp OnDemand 用户名 根 组名 轮 持久连接 标准错误路径 /var/log/OutputLog1.log 标准门诊 /var/log/OutputLog2.log 程序参数 /usr/local/TestApplication/Test

我创建了一个运行应用程序的LaunchDaemon服务

sudo launchctl load /Library/LaunchDaemons/com.testapp.plist
这是我的com.testapp.plist


标签
com.testapp
OnDemand
用户名
根
组名
轮
持久连接
标准错误路径
/var/log/OutputLog1.log
标准门诊
/var/log/OutputLog2.log
程序参数
/usr/local/TestApplication/Test.app/Contents/MacOS/Test
它工作得很好。但是,当我重新启动系统时,launchdaemon会启动我的应用程序,但它会终止应用程序

我在控制台中得到的日志是

20/03/17 7:15:25.239 PM Test[50]: Untrusted apps are not allowed to connect to Window Server before login.
20/03/17 7:15:25.239 PM Test[50]: Set a breakpoint at CGSLogError to catch errors as they are logged.
20/03/17 7:15:25.239 PM Test[50]: On-demand launch of the Window Server is allowed for root user only.
20/03/17 7:15:25.239 PM Test[50]: CGSLookupServerRootPort: Failed to look up the port for "com.apple.windowserver.active" (1102)
20/03/17 7:15:25.239 PM Test[50]: On-demand launch of the Window Server is allowed for root user only.
20/03/17 7:15:25.239 PM Test[50]: CGSLookupServerRootPort: Failed to look up the port for "com.apple.windowserver.active" (1102)
20/03/17 7:15:25.239 PM Test[50]: This user is not allowed access to the window system right now.
20/03/17 7:15:34.721 PM Test[50]: RegisterApplication(), FAILED TO establish the default connection to the WindowServer, CGSDefaultConnection() is NULL.
20/03/17 7:15:34.732 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.732 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.735 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.735 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.735 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.736 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.736 PM Test[50]: Invalid Connection ID 0
20/03/17 7:15:34.970 PM Test[50]: CGSLookupServerRootPort: Failed to look up the port for "com.apple.windowserver.active" (1102)
20/03/17 7:15:34.970 PM Test[50]: CGSLookupServerRootPort: Failed to look up the port for "com.apple.windowserver.active" (1102)
20/03/17 7:15:34.970 PM Test[50]: CGSLookupServerRootPort: Failed to look up the port for "com.apple.windowserver.active" (1102)
20/03/17 7:15:34.972 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.972 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.972 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.976 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
20/03/17 7:15:34.977 PM Test[50]: CGSConnectionByID: 0 is not a valid connection ID.
我还从活动监视器检查了应用程序的运行状态,它显示应用程序正在运行

还通过以下方式检查了守护进程状态:

sudo launchctl list | grep testapp
这也表明守护进程也在运行

另外,下面是我在daemon plist中的stdout日志(它记录了我在应用程序中所做的日志):

我无法找到这个问题的主要原因

请帮忙

提前感谢。

如图所示,错误消息:

登录前不允许不受信任的应用连接到Windows Server

这是一种误导,因为它表明问题在于信任,而实际上问题在于您试图从错误的上下文中执行GUI操作

启动守护进程在系统上下文中独立运行,并且可能在任何用户登录之前运行,并且没有对Windows服务器的访问权限-它们无法呈现UI

简而言之:如果您的应用程序提供用户界面,它就不能作为守护进程运行。

相比之下,启动代理(从
/Library/LaunchAgents
~/Library/LaunchAgents
加载)能够显示GUI

也许您所需要的只是创建一个登录项,尽管您必须根据每个用户创建一个登录项


有关用户每次登录时运行应用程序的各种方法的概述,请参阅我的。

谢谢,抱歉,但您能详细说明一下吗?另外,我正在用守护程序plist的stdout日志更新我的问题。@Akshada-systemix:看看我的更新是否有帮助。你的应用程序实际上做什么?它是否需要以root用户身份运行?它是否需要为系统的每个用户运行?启动应用程序的最佳方法取决于这些问题的答案。我的应用程序的目的是在后台运行track location,应该与引导我启动Daemon的任何用户无关。应用程序将被隐藏,用户将看不到。出于同样的原因,我已经从我的应用程序的“MainMenu.xib”中删除了“Window”和“MainMenu”。还添加了以下行以隐藏我的应用程序。ProcessSerialNumber psn={0,kCurrentProcess};TransformProcessType(&psn,kProcessTransformToBackgroundApplication);要隐藏我也尝试过的内容,请使用LSUIElement进行帮助。@Akshada systemix:Try
LSBackgroundOnly
。如果这没有帮助,也许您需要创建一个命令行工具,而不是
*.app
捆绑包。如果您有后续问题,请发布新问题。
2017-03-27 18:04:34.841 Test[802:16596] Application Started...
2017-03-27 18:04:34.896 Test[802:16596] argc : 1
2017-03-27 18:04:35.123 Test[802:16596] applicationWillFinishLaunching...
2017-03-27 18:04:35.145 Test[802:16596] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2017-03-27 18:04:35.146 Test[802:16596] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2017-03-27 18:04:35.147 Test[802:16596] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2017-03-27 18:04:35.148 Test[802:16596] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2017-03-27 18:04:35.224 Test[802:16596] applicationDidFinishLaunching...
2017-03-27 18:04:35.238 Test[802:16596] applicationDidChangeOcclusionState...
2017-03-27 18:04:35.253 Test[802:16596] applicationDidChangeOcclusionState...
2017-03-27 18:05:13.000 Test[820:17234] Application Started...
2017-03-27 18:05:13.072 Test[820:17234] argc : 1
2017-03-27 18:06:09.566 Test[92:505] Application Started...
_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
2017-03-27 18:06:17.845 Test[92:505] argc : 1
2017-03-27 18:06:18.254 Test[92:505] applicationWillFinishLaunching...
2017-03-27 18:06:18.299 Test[92:505] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2017-03-27 18:06:18.300 Test[92:505] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2017-03-27 18:06:18.300 Test[92:505] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2017-03-27 18:06:18.302 Test[92:505] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data
2017-03-27 18:06:22.918 Test[92:505] In -[NSApplication(NSQuietSafeQuit) _updateCanQuitQuietlyAndSafely], _LSSetApplicationInformationItem(NSCanQuitQuietlyAndSafely) returned error -600