4

例如,用户将我的应用程序放在他/她的桌面上。然后他/她将其复制(而不是移动)到/Application文件夹中。

如果 at~/Desktop已启动,如何防止重复启动 at ~/Application?有什么简单的方法吗?

或者如果用户在 中启动一个/Application,我可以检测到预启动的应用程序,然后立即切换到那个?

4

3 回答 3

3

如果您的应用程序检测到另一个实例已经在运行,那么获取所有正在运行的应用程序的列表并立即退出如何?

NSWorkspace您可以通过和获取所有活动应用程序的列表runningApplications

NSWorkspace * ws = [NSWorkspace sharedWorkspace];
NSArray *allRunningApps = [ws runningApplications];

它将返回一个NSRunningApplication实例数组,因此您所要做的就是通过该bundleIdentifier方法检查列表,例如您的应用程序 ID。

于 2014-03-31T08:56:02.210 回答
0

cacau 的回答给了我实现目标的灵感。这是我的代码(ARC):

- (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给了我很大的帮助,我给了他这个问题的声誉点。谢谢!

于 2014-03-31T11:45:27.163 回答
0

实际上只是在 NSTempDirectory 中创建一个文件,检查它,如果它在那里,你退出,或者提供一种删除文件的方法,这不是最简单的吗?这适用于进出沙盒。

于 2014-03-31T11:54:23.637 回答