如何在 AppleScript 中抑制/自动关闭错误对话框 [英] How to suppress / automatically dismiss error dialog in AppleScript

查看:33
本文介绍了如何在 AppleScript 中抑制/自动关闭错误对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我以登录用户身份运行后台进程,该进程经常尝试挂载 AFP 共享以备份某些数据.如果无法安装共享,则应忽略此项.

I have background process running as the logged on user that frequently tries to mount an AFP share to backup some data. If the share cannot be mounted this should just be ignored.

在我的脚本(实际上是 bash)中,我通过 AppleScript mount volume 片段安装共享.与 mountmount_afp 命令相比,这似乎是使用来自 Kerberos 票证或用户钥匙串的凭据在相应服务器上自动验证用户的唯一方法.特别是,我不想希望必须在脚本中存储密码:

In my script (bash, actually) I am mounting the share via an AppleScript mount volume snippet. In contrast to the mount or mount_afp commands, this appears to be the only way to automatically authenticate the user at the respective server with credentials from the Kerberos ticket or the user's keychain. In particular, I do not want to have to store a password in the script:

try
    mount volume "afp://server/share"
on error errText number errNum
    log {errText, errNum}
end try

这通常工作正常,但尽管有 try ... on error 块,mount volume"命令总是在出现错误时打开一个对话框:

This works generally fine, but despite the try ... on error block, the 'mount volume' command always opens a dialog in case of an error:

我正在寻找:

  • 一种抑制此对话框的方法,或
  • 自动关闭它的解决方案(可能涉及一些 SystemEvents 诡计?),或
  • mountmount_afp 使用来自Kerberos 票证和用户钥匙串的凭据而无需提供密码的方法.
  • a way to suppress this dialog, or
  • a solution to automatically dismiss it (maybe involving some SystemEvents trickery?), or
  • an approach to teach mount, respectively mount_afp to use the credentials from the Kerberos ticket and the user's keychain without having to provide a password.

我用谷歌搜索并尝试了几个小时,但还没有找到任何解决方案.

I have googled and tried for a couple of hours, but not yet found any solution.

推荐答案

我多年来一直在我的 mac mini 媒体服务器上解决这个问题,我相信我终于找到了解决方案.

I have been fighting this problem on my mac mini media server for ages and believe i finally have a solution.

我把它分成两个脚本:

第一个在空闲状态下运行(而不是重复循环)并每 10 秒调用第二个脚本来处理驱动器安装.

the first one runs on idle (rather than a repeat loop) and calls a second script every 10 seconds that handles the drive mounting.

--------------------------------------------------------------------------------------
--"On Idle Launch Basic Drive Mounter.app"

on idle
    try
        --script loads on startup, so first we wait 5 seconds to ensure network
        delay 5
        --run the mounter script which is on the desktop
        run script file ":Users:localusername:Desktop:Basic Drive Mounter.app"

    on error errStr number errorNumber
        --listen for the apple quit command and quit
        if the errorNumber is equal to -128 then
            quit
            return 1
        --listen for the unknown error and ignore it
        else if the errorNumber is equal to -5014 then
            return 5
        else
            --all other errors are also ignored
            return 5
        end if
    end try
    --return with a wait of 5 seconds before next idle run
    return 5

end idle
--------------------------------------------------------------------------------------

第二个脚本检查网络,然后尝试使用 shell 挂载卷山.我最初使用查找器安装卷"并且代码也作为注释存在,但我不喜欢弹出错误的对话框;即使只有一秒钟,所以我继续使用 shell 脚本.

the second script does the checking of the network, then tries to mount the volume using a shell mount. i originally used a finder "mount volume" and that codes exists as comments too, but I didn't like the dialog popping up on errors; even if only for a second, so i moved on to shell script.

--------------------------------------------------------------------------------------
--"Basic Drive Mounter.app"
try
    set IP_address to "xxx.xxx.xxx.xxx"

    set IP_Valid to true

    try
        do shell script ("ping -c 2 " & IP_address)
    on error
        set IP_Valid to false
    end try

    if IP_Valid then
        tell application "Finder"
            if disk "work" exists then
            else
                -->>shell script version
                try
                    do shell script "mkdir /Volumes/work"
                end try
                do shell script "mount_afp afp://xxx.xxx.xxx.xxx/work /Volumes/work/"
                --<<shell script version
                -->>finder mount volume version
                --with timeout of 1 second
                --  mount volume "afp://xxx.xxx.xxx.xxx/work"
                --end timeout
                --<<finder mount volume version
            end if
        end tell
    end if
on error
    -->>finder mount volume version
    --on error finder returns an error dialog which needs to be closed to go back and  retry
    --tell application "System Events"
    --  keystroke return
    --end tell
    --<<finder mount volume version
    return 0
end try    
--------------------------------------------------------------------------------------

并非所有这些都是我自己的代码,非常感谢 applescript 社区和谷歌 - 记得转发

not all of this is my own code, so many thanks goes out to the applescript community and google - remember to pay it forward

这篇关于如何在 AppleScript 中抑制/自动关闭错误对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆