Удаление папок с помощью Applescript не работает в некоторых системах - PullRequest
0 голосов
/ 25 февраля 2019

Я использую Applescript для выполнения части работы установщиков для моих продуктов.Я без проблем использовал один и тот же сценарий в течение многих лет, но недавно от нескольких пользователей были получены отчеты, в которых сценарий не очищается после себя, что приводит к проблемам.Я не могу воссоздать это на своих системах, и поэтому мне интересно, мог бы кто-нибудь из вас пролить свет на то, почему это происходит в некоторых системах.

Установщики - это файлы * .pkg.Установщики создают папку с именем Contents в домашнем каталоге пользователя с полезной нагрузкой (одна или несколько папок, содержащих файлы * .pyc и * .txt) вместе с Applescript, а затем вызывают сценарий оболочки, который выглядит примерно так::

#!/bin/sh

open "$2/Contents/Live AutoConfig.app"

exit 0

AutoConfig.app - это скомпилированный Applescript.Он переносит полезную нагрузку в Contents в содержимое одного или нескольких файлов * .app в Приложениях.Эта часть отлично работает.В конце этой передачи сценарий должен удалить папку Contents .Это то, что не работает.Код для очистки выглядит следующим образом:

on clean_up()
    set temp_path to path to me
    tell application "Finder"
        set script_path to (container of temp_path) as Unicode text
        delete (script_path)
    end tell
end clean_up

Когда это не работает, нет сообщений об ошибках или чего-либо еще.Папка Contents просто не удаляется, как это должно быть.И да, я уверен, что clean_up вызывается.Я нахожу это довольно странным, поскольку, с точки зрения безопасности, я думаю, что передача файлов в * .apps более рискованна, чем удаление папки из домашнего каталога, и все же передача работает нормально.Странно.

Некоторая дополнительная информация: Установщики и скрипты были созданы с использованием 10.5.8 (FWIW, это, похоже, не проблема, поскольку установщики все еще работают нормально на моих других системах, работающих под управлением 10.12.6 ипотом).Пользователи, имеющие эту проблему, запускают установщики 10.12.6 и 10.13.6.

Есть идеи, почему это может происходить?

1 Ответ

0 голосов
/ 26 февраля 2019

Это не прямое решение вашей проблемы.Хорошим началом для выявления проблемы было бы заключить ваш код в операторы «try» и «on error».Таким образом, когда ваш код встречает ошибку, вы можете просто заставить этот обработчик ошибок отображать предупреждение или фактически создавать файл журнала ошибок скрипта с некоторой информацией о том, что вызвало ошибку.Я бы предпочел, чтобы ваш AppleScript создавал файл журнала ошибок скрипта, тем более что он запускается на нескольких разных машинах с разными версиями macOS.Вполне возможно, что причина сбоя кода на одном компьютере отличается от причины сбоя на другом компьютере.Можно было бы часами гоняться за их хвостом, только чтобы узнать, что исправление работает только на одном компьютере, но не на других и т. Д.рабочий стол пользователя.Просто поместите код AppleScript из вашего AutoConfig.app в подпрограмму «try», перекомпилируйте и сохраните (обязательно сохраните копию исходного файла AutoConfig.app) и перераспределите на компьютеры, которые вызывают ошибки.Если повезет, их ошибки будут зарегистрированы на их рабочем столе, когда они снова попытаются запустить установщики пакетов

try

    -- INSERT YOUR CODE HERE

on error the error_message number the error_number
    set the error_text to "Error: " & the error_number & ". " & the error_message
        my write_error_log(the error_text)
end try

on write_error_log(this_error)
    set the error_log to ((path to desktop) as text) & "Script Error Log.txt"
    try
        open for access file the error_log with write permission
        write (this_error & return) to file the error_log starting at eof
        close access file the error_log
    on error
        try
            close access file the error_log
        end try
    end try
end write_error_log

Вы также можете добавить пару предложений «если… тогда» для адресов компьютеровтам уже есть папка «Содержимое», потому что эти папки не были удалены из предыдущей установки.Если эта папка все еще там, она, вероятно, вызовет ошибку при запуске вашей отладочной версии кода.Таким образом, вы можете рассмотреть возможность добавления следующего кода в начало вашего скрипта для решения этой возможной проблемы

set contentsFolder to (path to home folder as text) & "Contents"
tell application "Finder"
    if folder contentsFolder exists then delete folder contentsFolder
end tell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...