首先,它是“Mac OS X”或“OS X”。没有“OS/X”之类的东西。
其次,Mac OS X 没有 Boost。您需要将它与您的应用程序捆绑在一起。
第三,大多数 Carbon 在 64 位中不可用。这是一个明确的信号,即 Carbon 的这些部分有一天会消失(当 Apple 在其硬件中放弃 32 位时)。迟早,你要么用 Cocoa 重写你的应用程序,要么放弃 Mac。
通常,OS/X 上的应用程序包只能启动一次,但是通过简单地重命名包,相同的应用程序可以启动两次。
不,它不能。启动重命名或移动的应用程序将简单地激活(带到前面)已经运行的进程;它不会与第一个进程一起启动新的第二个进程。
有几种方法可以判断应用程序是否已经在运行。在每种情况下,您都在启动时执行此操作:
- 使用 Cocoa 的 NSConnection 注册一个具有单个常量名称的连接。如果名称已经注册,这将失败。(您可以从 Carbon 应用程序中使用 Foundation;这是您必须小心使用的应用程序工具包。)
- 使用进程管理器扫描进程列表以查找其包标识符与您要查找的进程匹配的进程。包标识符不是不可更改的,但它比文件名或位置更难更改。
如果您想查看某人何时运行您自己的第二个副本,您可以使用 CFNotificationCenter:
- 将自己添加为“com.yourdomain.yourappname.LaunchResponse”的观察者。
- 以“com.yourdomain.yourappname.LaunchCall”的名称发布通知。
- 将自己添加为“com.yourdomain.yourappname.LaunchCall”的观察者。
在呼叫通知的观察回调中,发布响应通知。
在响应通知的观察回调中,退出。
因此,当第一个进程启动时,它将调用并没有得到响应;当第二个进程启动时,它将调用,从第一个进程获取响应,然后退出第一个进程。