|
|
1
3
单独的进程是一个很好的解决方案,看看Sparkle框架(大多数应用程序使用它进行自动更新),它们也用于这个独立的应用程序- https://github.com/andymatuschak/Sparkle/blob/master/relaunch.m |
|
|
2
2
只是扩展一下Julia的答案,因为我不得不重新启动我的应用程序,而不是更新,所以我研究了Sparkle是如何做到的- Sparkle的最新版本(截至2011年11月)有一个名为finish_installation.app的项目目标,它包含在Sparkle框架的Resources目录中。Sparkle作为主机应用程序的一部分运行,它将finish_应用程序复制到application_支持目录,并使用launched运行其二进制可执行文件,如下图所示,传递主机进程id和重新启动路径:
似乎有了这个函数,当父进程退出时(?),将启动finish_应用程序的父级。 finish_installation等待传入的进程id消失,并进行初始检查以查看是否启动了其父进程(pid=1)
然后启动应用程序:
最后一个有趣的小贴士:如果安装需要很长时间,那么finish_installation会将自身更改为前台进程,以便用户可以看到某些应用正在运行:
|
|
|
3
0
|