首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AppleScript检查应用程序是否存在

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

Stack Overflow用户
提问于 2013-01-13 04:28:07
回答 4查看 8.7K关注 0票数 5

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

代码语言:javascript
复制
get exists application "FooApp"

此代码仅适用于进程名称与其应用程序名称匹配的应用程序,该应用程序名称涵盖了大多数但不是所有应用程序:

代码语言:javascript
复制
tell application "System Events"
    get exists application process "FooApp"
end tell

(例如,在我的机器上,"OmniGraffle专业版“是进程名,但相应的应用程序名是"OmniGraffle专业版4”。)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-13 04:56:23

请注意,您的两个脚本做了不同的事情。第一个检查它是否在计算机上。第二个检查当前是否正在运行。因此,这里是如何做第一件事。

代码语言:javascript
复制
set doesExist to false
try
    do shell script "osascript -e 'exists application \"foo\"'"
    set doesExist to true
end try

return doesExist

请注意,正如您所指出的,一些应用程序具有各种名称。在这些情况下,您可以使用应用程序的捆绑包id,而不是其名称。下面是如何获取Safari的id并使用它。

代码语言:javascript
复制
set appID to id of application "Safari"
exists application id appID

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

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2013-01-16 22:42:27

@regulus6633指出您在示例中做了两件不同的事情,这是正确的,而且他关于包标识符的建议也很正确。

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

代码语言:javascript
复制
try
    tell application "Finder" to get application file id "bundle.id.here"
    set appExists to true
on error
    set appExists to false
end try

这就避免了“应用程序x在哪里?”对话框中,并将布尔值分配给appExists。您也可以在on error块中使用display alert (或者您想要的任何东西)。

对于你的第二个例子,你可以这样写:

代码语言:javascript
复制
tell application "System Events"
    set processIsRunning to ((bundle identifier of processes) ¬
    contains "com.bundle.id.here")
end tell

它的功能与@Regus6633的代码几乎完全相同,只是获取进程列表并在一行中对其进行检查。你也不必担心初始化processIsRunning。

如果您使用的是应用程序名称,只需将bundle identifier替换为name即可。

票数 5
EN

Stack Overflow用户

发布于 2016-11-01 00:05:56

这是一个古老的问题,但答案可能仍然是有帮助的。以下shell脚本不会启动应用程序,而是避免出现“应用程序x在哪里?”对话框,如果应用程序不存在,则接受应用程序名称或包id作为输入,如果存在,则返回应用程序的包id,如果不存在,则返回空字符串:

代码语言:javascript
复制
set appBundleId to do shell script "osascript -e " & ("id of application \"" & appRef & "\"")'s quoted form & " || osascript -e " & ("id of application id \"" & appRef & "\"")'s quoted form & " || :"
set doesExist to (appBundleId ≠ "")

其中,appRef是应用程序名称或包id。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14297644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档