Как подавить диалоговое окно с сообщением об ошибке OS X в appleScript или как убедиться, что удаленный общий ресурс подключен и совместно используется перед использованием команды монтирования тома - PullRequest
0 голосов
/ 04 марта 2019

Хорошо, так что я несколько дней занимался этим, и я нашел только одну похожую проблему .К сожалению, это не было решено полностью.

У меня есть скрипт, который проверяет сетевое соединение, проверяет удаленный компьютер и монтирует тома.

Скрипт работает как положено и является ошибкойобрабатываются с помощью блоков try, но в обработчике mountVolume () я получаю то же диалоговое окно с ошибкой, которое получает Daniel из другого поста, когда ресурс недоступен.Например, внешний диск отключен от удаленного компьютера или еще не завершил подключение.

Как только я закрываю диалог (ы) OS X, появляется сообщение об ошибке.Я мог бы просто избавиться от своего диалогового окна, но дело в том, что для каждого общего ресурса (сейчас 4), который я пытался смонтировать, который завершается неудачно, я получаю отдельное диалоговое окно с сообщением об ошибке OS X, которое я должен закрыть.

ЕслиЯ могу получить сценарий для подавления этих блоков. Я могу использовать один собственный блок в сценарии для всех ошибок.

Если я не могу, я хотел бы проверить, существует ли общий ресурс на УДАЛЕННОМкомпьютер, прежде чем я попытаюсь использовать монтирование громкости, таким образом, обойдя все ошибки вместе.

Спасибо за любые идеи.

Вот мой код:

global userName
global userPass
global ipAddress

set ipAddress to "###.###.###.###"

set userName to short user name of (system info)
set userPass to do shell script ("security find-internet-password -a " & userName & " -s " & ipAddress & " -g")

on FileExists(theFile)
    tell application "System Events"
        if exists file theFile then
            return true
        else
            return false
        end if
    end tell
end FileExists

on FolderExists(theFolder)
    tell application "System Events"
        if exists folder theFolder then
            return true
        else
            return false
        end if
    end tell
end FolderExists

on doCleanUp()
    if FolderExists("/Volumes/SHARENAME") then
        tell application "Finder" to eject disk "SHARENAME"
    end if

    set checkPath to ((path to home folder as text) & "SHARENAME")
    if FileExists(checkPath) then
        do shell script ("rm ~/SHARENAME")
    end if
end doCleanUp

on checkNet()
    try
        do shell script ("nc -z " & ipAddress & " 445")
        return true
    on error
        return false
    end try
end checkNet

on mountVolume()
    try
        mount volume "smb://" & ipAddress & "/SHARENAME"
        return true
    on error errText number errNum
        log {errText, errNum}
        return false
    end try
end mountVolume

on makeAlias()
    if FolderExists("/Volumes/SHARENAME") then
        set checkPath to ((path to home folder as text) & "SHARENAME")
        tell application "Finder"
            if not (exists file checkPath) then
                make new alias to disk "SHARENAME" at path to home folder
            end if
        end tell
    end if  
end makeAlias

set tryAgain to 0
set ipValid to false
set doRetry to true

doCleanUp()

repeat while doRetry
    repeat 3 times
        if not ipValid then
            set ipValid to checkNet()
        end if
    end repeat

    if ipValid then
        set volMounted to mountVolume()
        if volMounted then
            set aliasCreated to makeAlias()
            if aliasCreated then
                return
            else
                set notificationMessage to "Could not create alias."
                display alert "An error has occurred." message notificationMessage as critical
                return
            end if
        else
            set notificationMessage to "Could not mount remote volume."
            display alert "An error has occurred." message notificationMessage as critical          
            return
        end if
    else
        set retryCheck to display alert "Can't connect. Do you want to retry?" buttons {"Yes", "No"} default button 1
        set doRetry to button returned of retryCheck as boolean

        if not doRetry then
            doCleanUp()
            set notificationMessage to "Could not connect to Local Area Network."
            display alert "An error has occurred." message notificationMessage as critical
        end if
    end if
end repeat

1 Ответ

0 голосов
/ 05 марта 2019

Диалог ошибки генерируется вне AppleScript, поэтому вы не можете перехватить его с помощью оператора try.Единственный известный мне способ избежать диалога - это создать точку монтирования и самостоятельно смонтировать том с помощью сценария оболочки mount вместо команды mount volume, например:

do shell script "mount -t smbfs //169.254.0.0/SHARENAME /path/to/sharepoint“

Если естьошибка, оператор try все равно ее поймает, только без внешнего диалога.

...