我正在使用以下代码来获取应用程序的路径。它适用于所有情况,但前排失败。
CFStringRef cfStrAppShortName = NULL;
FSRef appRef;
CFURLRef cfAppUrlRef = NULL;
CFBundleRef cfAppBundleRef = NULL;
CFDictionaryRef cfAppDictRef = NULL;
CFStringRef cfStrAppBundleName = NULL;
OSErr osErr;
cfStrAppShortName = CFSTR(Front Row);
if(cfStrAppShortName != NULL)
{
osErr = LSFindApplicationForInfo(kLSUnknownCreator,NULL,cfStrAppShortName,&appRef,NULL);
if(osErr == noErr)
{
cfAppUrlRef = CFURLCreateFromFSRef ( kCFAllocatorDefault, &appRef);
cfAppBundleRef = CFBundleCreate (kCFAllocatorDefault,cfAppUrlRef);
cfAppDictRef = CFBundleGetInfoDictionary (cfAppBundleRef);
cfStrAppBundleName = (CFStringRef)CFDictionaryGetValue (cfAppDictRef,kCFBundleNameKey);
}
我期待来自Applications文件夹的应用程序路径,但它来自/ system / coreservices /..
对于/ system / library / coreservices / ..中存在的所有项都会发生这种情况。
是否有任何不应该查看/ system / library / coreservices ..或任何更好的解决方案? 任何人都可以帮助我吗?
先谢谢。
答案 0 :(得分:1)
识别应用程序的更可靠方法是通过包标识符。例如,在Front Row的情况下,有两个具有相同名称的独立应用程序:
查看包标识符,看起来这个函数毕竟返回正确的Front Row的路径,因为/ Applications中的那个只是一个启动器。
但是你不应该依赖它 - 该函数可以随时返回启动器的路径。此外,任何人都可以创建一个应用程序包并将其命名为“Front Row”。
使用捆绑包标识符,以便始终要求正确的应用程序。