使用AppleScript检查应用程序是否存在

Dav*_*ter 5 applescript

此代码不适用于不存在的应用程序,因为它会提示用户查找"FooApp"(我不想与用户交互):

get exists application "FooApp"
Run Code Online (Sandbox Code Playgroud)

此代码仅适用于进程名称与其应用程序名称匹配的应用程序,该应用程序名称涵盖大多数应用程序,

tell application "System Events"
    get exists application process "FooApp"
end tell
Run Code Online (Sandbox Code Playgroud)

(例如在我的机器上"OmniGraffle Professional"是一个进程名称,但相应的应用程序名称是"OmniGraffle Professional 4".)

rob*_*lls 6

@regulus6633正确地指出你\xe2\x80\x99在你的例子中做了两件不同的事情,而且他关于包标识符的建议也很准确。

\n\n

我检查应用程序是否已安装的首选方法如下:

\n\n
try\n    tell application "Finder" to get application file id "bundle.id.here"\n    set appExists to true\non error\n    set appExists to false\nend try\n
Run Code Online (Sandbox Code Playgroud)\n\n

这可以避免 \xe2\x80\x9cWhere is application x?\xe2\x80\x9d 对话框,并为 appExists 分配一个布尔值。您还可以display alerton error街区(或任何您想要的地方)。

\n\n

对于第二个示例,您可以编写:

\n\n
tell application "System Events"\n    set processIsRunning to ((bundle identifier of processes) \xc2\xac\n    contains "com.bundle.id.here")\nend tell\n
Run Code Online (Sandbox Code Playgroud)\n\n

它的作用几乎与 @regulus6633\xe2\x80\x99s 代码的作用完全相同,但会获取进程列表并在一行中进行检查。您也不必担心初始化 processIsRunning。

\n\n

如果您使用应用程序名称,只需交换bundle identifiername.

\n


reg*_*633 4

请注意,您的2个脚本执行不同的操作.第一个检查它是否在计算机上.第二个检查它是否当前正在运行.所以这是第一件事.

set doesExist to false
try
    do shell script "osascript -e 'exists application \"foo\"'"
    set doesExist to true
end try

return doesExist
Run Code Online (Sandbox Code Playgroud)

请注意,正如您所指出的,某些应用程序具有多种名称.在这些情况下,您可以使用应用程序的软件包ID而不是它的名称.以下是如何获取Safari的ID并使用它...

set appID to id of application "Safari"
exists application id appID
Run Code Online (Sandbox Code Playgroud)

如果你想看看它是否正在运行,就像你的第二个脚本一样,你可以这样做......

set processIsRunning to true
tell application "System Events"
    set runningProcesses to processes whose bundle identifier is appID
end tell
if runningProcesses is {} then set processIsRunning to false
return processIsRunning
Run Code Online (Sandbox Code Playgroud)

  • 这两种方法都可以打开应用程序.如果您不想打开应用程序怎么办? (5认同)