You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用纯C++限制macOS进程为单实例?

macOS 控制台应用纯C++实现单实例检测(对齐Swift逻辑)

要在纯C控制台应用中实现和你提供的Swift代码相同的单实例检测逻辑,需要通过**Objective-C**桥接Cocoa框架的NSRunningApplication和NSWorkspaceAPI,最终对外暴露纯C++接口,实现方式如下:

1. 纯C++头文件(对外接口)

创建头文件SingleInstanceChecker.h,提供纯C++调用入口:

#ifndef SingleInstanceChecker_h
#define SingleInstanceChecker_h

#include <stdbool.h>

// 检测是否有同bundle ID的其他实例在运行
bool isAnotherInstanceRunning();

#endif /* SingleInstanceChecker_h */

2. Objective-C++实现文件(桥接Cocoa)

创建实现文件SingleInstanceChecker.mm(注意后缀是.mm,让编译器按Objective-C++处理),封装Cocoa API调用:

#include "SingleInstanceChecker.h"
#include <Cocoa/Cocoa.h>

bool isAnotherInstanceRunning() {
    // 获取当前应用实例信息
    NSRunningApplication *currentApp = [NSRunningApplication currentApplication];
    NSString *currentBundleID = currentApp.bundleIdentifier;
    pid_t currentPID = currentApp.processIdentifier;

    // 获取系统中所有运行的应用
    NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
    NSArray<NSRunningApplication *> *runningApps = workspace.runningApplications;

    // 过滤同bundle ID且不同PID的应用
    for (NSRunningApplication *app in runningApps) {
        if ([app.bundleIdentifier isEqualToString:currentBundleID] && app.processIdentifier != currentPID) {
            return true;
        }
    }

    return false;
}

3. 使用说明

  • 在你的纯C++主代码中直接引入头文件并调用函数:
    #include "SingleInstanceChecker.h"
    #include <iostream>
    
    int main() {
        if (isAnotherInstanceRunning()) {
            std::cout << "已有相同实例在运行,退出程序" << std::endl;
            return 1;
        }
    
        // 你的业务逻辑
        std::cout << "单实例启动成功" << std::endl;
        while (true) { /* 保持运行 */ }
        return 0;
    }
    
  • 编译时需链接Cocoa框架,示例clang编译命令:
    clang -o SingleInstanceDemo main.cpp SingleInstanceChecker.mm -framework Cocoa
    

注意事项

  • 如果你的控制台应用没有配置bundle ID(默认控制台App无Info.plist),可以改用进程名或可执行文件路径作为检测标识,将代码中的bundleIdentifier替换为localizedName或[[app.executableURL lastPathComponent] stringByDeletingPathExtension]即可。
  • 上述代码逻辑与你提供的Swift代码完全对齐,确保检测行为一致。

内容的提问来源于stack exchange,提问作者c00000fd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:20:28