例如,用户将我的应用程序放在他/她的桌面上。然后他/她将其复制(而不是移动)到/Application
文件夹。
如果已启动 ~/Desktop
的那个,那么如何防止重复启动 ~/Application
?有什么简单的方法吗?
或者,如果用户在/Application
中启动了该应用,我可以检测预先启动的应用,然后立即切换到该应用?
答案 0 :(得分:3)
如果您的应用检测到其他实例已在运行,那么如何获取所有正在运行的应用程序的列表并立即退出?
您可以通过NSWorkspace
和runningApplications
获取所有有效应用的列表:
NSWorkspace * ws = [NSWorkspace sharedWorkspace];
NSArray *allRunningApps = [ws runningApplications];
它会返回一组NSRunningApplication
个实例,所以您只需检查列表,例如通过bundleIdentifier
方法确认您应用的ID。
答案 1 :(得分:0)
- (BOOL)checkAppDuplicateAndBringToFrontWithBundle:(NSBundle *)bundle
{
NSRunningApplication *app;
NSArray *appArray;
NSUInteger tmp;
pid_t selfPid;
BOOL ret = NO;
selfPid = [[NSRunningApplication currentApplication] processIdentifier];
appArray = [NSRunningApplication runningApplicationsWithBundleIdentifier:[bundle bundleIdentifier]];
for (tmp = 0; tmp < [appArray count]; tmp++)
{
app = [appArray objectAtIndex:tmp];
if ([app processIdentifier] == selfPid)
{
/* do nothing */
}
else
{
[[NSWorkspace sharedWorkspace] launchApplication:[[app bundleURL] path]];
ret = YES;
}
}
return ret;
}
它通过包标识符检查应用程序重复。当捆绑复制时,它将所有其他应用程序置于前面并返回YES。收到YES后,申请可以自行终止。
然而,由于cacau给了我很大的帮助,我给了他这个问题的声誉点。谢谢!
答案 2 :(得分:0)
实际上只是在NSTempDirectory中创建一个文件,检查它以及它是否在那里,你退出,或者提供删除文件的方法是不是最简单的? 这对于进入和离开沙箱都有效。