0

我正在使用以下代码来获取应用程序的路径。它适用于所有情况,但不适用于前排。

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.. 或任何更好的解决方案中查找?谁能帮我?

提前致谢。

4

1 回答 1

1

识别应用程序的更可靠方法是通过捆绑标识符。例如,在 Front Row 的情况下,有两个不同的同名应用程序:

  • /Applications/Front Row.app:com.apple.frontrowlauncher
  • /System/Library/CoreServices/Front Row.app:com.apple.frontrow

查看捆绑包标识符,看起来这个函数毕竟返回了正确的 Front Row 的路径,因为 /Applications 中的那个只是一个启动器。

但是你不应该依赖它——这个函数可以随时返回启动器的路径。此外,任何人都可以创建一个应用程序包并将其命名为“Front Row”。

使用捆绑标识符,以便您始终要求正确的应用程序。

于 2009-12-30T08:47:01.200 回答