CFBundleCopyExecutableURL 函数有时会返回绝对 URL,有时则不会。如果在 CFBundleCopyExecutableURL 之前调用 CFBundleCopyExecutableArchitectures,则 url 是绝对的(为什么?)。如何强制此函数始终返回绝对 URL?谢谢。
text getBundleExeutableUrl(text bundlePath)
{
CFURLRef url = CFURLCreateFromFileSystemRepresentation(0,
(char*)bundlePath.c_str(), bundlePath.length(), false);
CFBundleRef bundle = CFBundleCreate(0, url);
CFBundleCopyExecutableArchitectures(bundle); // this is necessary to get absolute path
CFURLRef exeUrl = CFBundleCopyExecutableURL(bundle);
CFStringRef srExe = CFURLCopyFileSystemPath(exeUrl, 0);
text bundleExe = srExe;
CFRelease(srExe);
CFRelease(exeUrl);
CFRelease(url);
CFRelease(bundle);
return bundleExe;
}