2009-12-29 141 views
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); 
    } 

我是从应用程序文件夹期待应用程序的路径,但它来源于/系统/ coreservices/..

出现这种情况的所有项目呈现/系统/库/ coreservices/..。

是否有任何它不应该看/ system/library/coreservices ..或任何更好的解决方案? 任何人都可以帮助我吗?

在此先感谢。

+0

你有什么具体问题?它没有找到应用程序,还是它返回了你不期望的路径? – 2009-12-30 06:26:07

+0

它的路径。 在System/Library/CoreServices/..中有一个FrontRow.app,它也存在于/ Applications/..路径中。 我期待/应用程序/前排,但它给了我系统/库/ CoreServices /前排 – MacGeek 2009-12-30 07:23:04

回答

1

识别应用程序的更可靠的方法是使用包标识符。前排的情况下,例如,有两个独立的应用程序具有相同的名称:

  • /应用/前Row.app:com.apple.frontrowlauncher
  • /系统/图书馆/ CoreServices /接待Row.app:com.apple.frontrow

望着束标识符,它看起来像这样函数返回的路径正确的Front Row毕竟,因为一个在/应用程序仅仅是一个启动程序。

但是你不应该依赖这个功能 - 该功能可以随时返回启动程序的路径。而且,任何人都可以创建一个应用程序包并将其命名为“Front Row”。

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

+0

我只有应用程序名称与我。例如前排。我没有包标识符。 – MacGeek 2009-12-30 13:02:32

+0

你能更具体吗?它是如何获得名称的,而不是您想要的应用程序的包标识符? – 2009-12-30 13:52:14

+0

它实际上是一个客户端服务器应用程序,其中服务器发送要启动或关闭的应用程序的名称。所以,在客户端,我只有应用程序的名称,在其上执行操作。 – MacGeek 2009-12-30 14:16:10

相关问题