Applescript:获取.app的路径而不打开它

时间:2014-10-29 17:22:11

标签: macos applescript

我有以下处理程序;

on getAppPath(appName)
  try
    return POSIX path of (path to application appName)
  on error
    return "NOT INSTALLED"
  end try
end getAppPath

使用例如" ImageOptim"将返回" /Applications/ImageOptim.app /"。

我遇到的问题是,这会在我的Dock中打开该应用程序,有没有办法在不发生这种情况的情况下获取此路径字符串?

感谢。

1 个答案:

答案 0 :(得分:3)

路径是在标准添加中,它必须启动应用程序才能获得返回值(Apple的某些应用程序除外 - 请参阅例如TextEdit)。一个想法是查询启动服务注册表,其中包含所有可执行文件的记录,并使用grep来提取与您指定的应用程序名称相匹配的路径。类似的东西:

getAppPath("TextEdit.app")

on getAppPath(appName)
    try
        set launchServicesPath to "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister"

        -- get the path to all executables in the Launch Service Registry that contain that appName
        set appPaths to paragraphs of (do shell script launchServicesPath & " -dump | grep --only-matching \"/.*\\" & appName & "\"")
        return appPaths

    on error
        return "NOT INSTALLED"
    end try
end getAppPath

请注意,这可以返回路径列表,因为可能存在多个具有匹配字符串应用名称的可执行文件。所以,你会想要考虑到这一点。