Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用execl(";/usr/bin/open";)在macOS中重新启动当前程序?_C_Objective C_Macos_Exec - Fatal编程技术网

如何使用execl(";/usr/bin/open";)在macOS中重新启动当前程序?

如何使用execl(";/usr/bin/open";)在macOS中重新启动当前程序?,c,objective-c,macos,exec,C,Objective C,Macos,Exec,我可以使用成功启动应用程序 execl(“/usr/bin/open”、“open”、“Applications/Foo.app”、“0”) 但当我在Foo.app中调用它时,这不起作用 我希望我的应用程序在崩溃和自动更新时重新启动 谢谢 open不会启动应用程序的第二个实例。如果应用程序已经在运行,它只会使其成为活动应用程序 通过执行应用程序包的可执行文件,您可以启动应用程序的第二个实例: excel("/Applications/Foo.app/Contents/MacOS/Foo", ..

我可以使用成功启动应用程序

execl(“/usr/bin/open”、“open”、“Applications/Foo.app”、“0”)

但当我在Foo.app中调用它时,这不起作用

我希望我的应用程序在崩溃和自动更新时重新启动


谢谢

open
不会启动应用程序的第二个实例。如果应用程序已经在运行,它只会使其成为活动应用程序

通过执行应用程序包的可执行文件,您可以启动应用程序的第二个实例:

excel("/Applications/Foo.app/Contents/MacOS/Foo", ...
虽然这不是推出Cocoa应用程序的推荐方式,但苹果的工程师向我保证,这会奏效。但是请注意,您现在有两个应用程序实例正在运行,共享相同的
NSUserDefaults
和其他资源,因此可能会出现一些奇怪的行为(或者通过
exit()
立即终止第一个应用程序)

话虽如此,这可能不是你想要做的

首先,你不能“检测崩溃并采取一些行动”,因为根据定义,你的应用程序已经崩溃。有一些软件包可以检测崩溃并记录相关信息;寻找这样的解决方案来重新启动你的应用程序

至于更新,我会再次引导您使用第三方解决方案,如。它处理退出旧应用程序、替换旧应用程序,然后以理智的方式启动新应用程序


最后,您可以使用
launchd
将您的应用程序注册为“用户代理”,这样,如果退出,它会自动重新启动。

当程序崩溃时,您的程序如何处理?你在处理程序中捕捉到信号了吗?“自动更新”是什么意思?你怎么知道你的程序在
/Applications/Foo.app
中,而不是用户选择的
/somepath/Foo.app
?@EricPostpischil是的,我正在捕捉信号。我的应用程序必须在/应用程序中,已强制执行。非常感谢James。是的,我在execl()之后立即调用exit()。另外,使用“open-n”怎么样?
open-n
也可以,但是执行
open
来执行另一个应用程序似乎是不必要的复杂性。