Как перезапустить перенесенное приложение на новое место? - PullRequest
0 голосов
/ 21 апреля 2020

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

on moveMyApp()
        set checkpath to ((path to "apps" as string) & "Lets Move")
        set myApp to ((path to current application as text))

        tell application "Finder"
            if exists file checkpath then
                return
            else
                tell current application
                    display alert "Move to Applications Folder?" buttons {"Not Move", "Move to Applications Folder"} default button 2
                    set response to button returned of the result
                    if response is "Move to Applications Folder" then
                        do shell script "mv " & quoted form of POSIX path of myApp & space & "/Applications"
                    end if
                end tell
                tell application "Lets Move" to quit
                delay 2
            end if
        end tell
        tell application "Lets Move" to activate
    end moveMyApp

1 Ответ

1 голос
/ 21 апреля 2020

Класс Objective- C, для которого вы это адаптируете, выполняет множество других функций, таких как получение авторизации и очистка флага карантина, но вы можете просто сказать приложению прекратить работу после запуска NSTask, который немного подождет, прежде чем перезапуск приложения. Например, операторы quit и activate можно заменить одним вызовом обработчика, который выполняет задачу перезапуска:

on moveMyApp()
    set checkpath to ((path to "apps" as string) & "Lets Move.app")
    set myApp to ((path to current application as text))
    tell application "Finder" to set moved to exists file checkpath
    if not moved then
        display alert "Move to Applications Folder?" buttons {"Do Not Move", "Move to Applications Folder"} default button 2
        set response to button returned of the result
        if response is "Move to Applications Folder" then
            do shell script "mv " & quoted form of POSIX path of myApp & space & "/Applications"
            relaunch(checkpath)
        end if
    end if
end moveMyApp

on relaunch(appPath)
    tell current application's NSTask's alloc()'s init()
        its setLaunchPath:"/bin/sh"
        its setArguments:{"-c", "sleep 1.0; open -a " & quoted form of "Lets Move"}
        its |launch|()
    end tell
    tell current application's NSApp to terminate:me
end relaunch

Обратите внимание, что хотя я немного очистил ваш обработчик, ошибки нет обработка завершена (проблемы с синхронизацией, невозможность перемещения приложения и т. д. c). Протестировано с Mojave и Xcode 10, перемещая приложение в папку пользователя ~/Applications.

...