0 votos

La acción "Salir de la aplicación" de Automator se detiene

Estoy tratando de configurar un Automator script</strkeep><strkeep>se detiene después de ejecutar la orden de salida. La aplicación que estoy tratando de salir es MakeMKV. También lo he intentado con Zoom (otra aplicación que me gustaría cerrar).

Sólo se detiene si realmente tiene que salir de la aplicación - y las aplicaciones salen. Si la aplicación no está abierta, el paso se salta y se pasa. El error que obtengo es:

"Salir La aplicación se detuvo" si se utiliza la acción Salir o "Run AppleScript was stopped" si se utiliza la acción AppleScript.

Lo he probado con Chrome, Mensajes y Notas, y todas ellas se cierran sin problemas. Estas otras aplicaciones están ejecutando la orden de salida - ¿hay alguna manera de averiguar por qué el script se está deteniendo, y suprimir lo que está haciendo?

edit: El bloque de código tiene el siguiente aspecto:

enter image description here

2voto

qarma Puntos 71

Puedes probar estas tres posibles soluciones para ver si alguna es mejor que la incorporada Automatizador acción.

El primero es un manejador de AppleScript simple que toma una lista de excepciones (aplicaciones que están exentas de ser abandonadas), y luego procede a enviar un comando de abandono a todas las demás (siendo éstas cualquier proceso de aplicación que no pertenezca a un archivo en el /System directorio por lo tanto, Buscador y Eventos del sistema se salvará, pero Automatizador no lo hará a menos que se especifique en la lista de excepciones, X ):

to quitAll(X as list)
    local X

    tell application id "com.apple.SystemEvents" to script Apps
        property list : the bundle identifier of processes ¬
            where the POSIX path of its application file ¬
            does not start with "/System"
        property locked : X
    end script

    tell Apps to repeat with id in its list
        ignoring application responses
            set A to the application id id
            if A's name is not in locked ¬
                then try
                quit A
            end try
        end ignoring
    end repeat
end quitAll

El segundo utiliza el mismo método que el anterior para recuperar una lista de aplicaciones en ejecución, pero coge su pid números. Estos se pasan en masa a un do shell script llamar a kill las aplicaciones (algunas personas se ponen nerviosas con esto, posiblemente porque el nombre del comando suena como si fuera una mala acción a realizar, pero es perfectamente seguro, y muy estándar. Las aplicaciones también suelen guardar sus estados de ventana y documento, por lo que el kill puede permitirles recuperar el .savedState datos cuando se vuelva a abrir más tarde.

to kill(X as list)
    local X

    tell application id "com.apple.SystemEvents" to script Apps
        property parent : a reference to every process where the ¬
            POSIX path of its application file doesn't start with ¬
            "/System"
        property id : my unix id
        property name : my short name
        property locked : X
    end script

    tell Apps to repeat with i from 1 to length of id
        if name's item i is in locked ¬
            then set id's item i to []
    end repeat

    set my text item delimiters to space
    "kill " & integers in the id of Apps
    do shell script result
end kill

La última solución es un manejador AppleScript-ObjectiveC que, una vez más, obtiene una lista de las aplicaciones en ejecución que no se encuentran en ningún lugar del /System y no aparecen (por su nombre) en la lista que se pasa al manejador:

to terminate(X as list)
    set pred to "!bundleURL.path LIKE '/System/*'" & ¬
        "&&!localizedName IN[c] %@"

    script
        use framework "Foundation"

        set [A, P] to a reference to my [¬
            NSWorkspace's sharedWorkspace's runningApplications, ¬
            NSPredicate's predicateWithFormat_(pred, X)]
        (A's filteredArrayUsingPredicate:P)'s terminate
    end script

    run result
end terminate

No he probado este manejador para ver qué permisos hay que conceder, ya que no quería que todos mis programas terminaran. Pero hazme saber si hay algún contratiempo y te dirigiré en consecuencia. La palabra terminate dentro de el manipulador puede ser sustituido por forceTerminate (distingue entre mayúsculas y minúsculas) para forzar la salida de cada aplicación. Esto, si fuera yo, sería realmente mi preferencia, ya que he configurado mi sistema para guardar el estado de las aplicaciones en las terminaciones forzadas, y evita el "¿Quiere guardar el documento actual?" banalidad.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X