gpt4 book ai didi

c++ - OS X : check if process runs from bundle or not

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:58 26 4
gpt4 key购买 nike

我想检查给定的远程进程可执行文件是 bundle 的一部分还是只是一个独立的可执行文件。我的方法是一种非常直接的方法,它深深地依赖于这样的假设:如果在/[exec_name].app/子树中找到了可执行文件,那么这一定是它的包含包(见下文)

我希望为此找到相关的 cocoa 框架,涵盖所有可能的情况。

char path[MAXPATHLEN+1] = {0};
int ret = proc_pidinfo(pid, PROC_PIDPATHINFO, 0,&path, sizeof(path));
if (!ret) {
std::string app_suffix(".app");
unsigned long split_idx = path.rfind(app_suffix);
if (split_idx != std::string::npos)
cout << "found bundle : " << path.substr(0,split_idx+app_suffix.size());
else
cout << " stand alone executable \n";
}

我还找到了另一种使用 applescript 从可执行名称中获取 bundle 的方法,但我更喜欢在 cocoa 或 core-foundation 中找到等效项。

获取包标识符(苹果脚本):

osascript -e 'on run args
set output to {}
repeat with a in args
set end of output to id of app a
end
set text item delimiters to linefeed
output as text
end' Finder '[name of executable]’

从包标识符中,很容易访问包本身(在 cocoa 中):

NSBundle* myBundle = [NSBundle bundleWithIdentifier:@"<bundle_identifier>"]

感谢您的帮助!

最佳答案

如果我正确理解你的问题,你只需要 NSRunningApplication .

该类包括 bundleIdentifierbundleURL 属性。

关于c++ - OS X : check if process runs from bundle or not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32035313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com