0 votos

Script de Automator para reiniciar una aplicación minimizada sin AppleScript

¿Cómo puedo hacer que un script de Automator reinicie una aplicación y la minimice después de reiniciar?

Tengo una aplicación (versión de Setapp de MoneyWiz) con la característica muy molesta de que si no se inicia al menos una vez a la semana, eliminará todos sus archivos guardados en la nube. Mantener la aplicación en funcionamiento continuamente no cuenta, tiene que ser (re)iniciada.

Creé un script de Automator en el calendario que se ejecuta cada dos noches y reinicia la aplicación, pero eso lleva la aplicación al frente, y quiero que se lance en segundo plano. Debido a la falta de AppleScript de la aplicación no puedo usar el
tell application [...] set miniaturized
que es la solución común que encuentro cuando busco soluciones en la web.

3 votos

¿Qué aplicación es? Tal vez sería mejor ver si podemos sugerir una solución. El problema suena muy extraño.

2voto

qarma Puntos 71

Como mencionaste "He creado un script de automatización de calendario que se ejecuta cada dos noches y reinicia la aplicación, pero eso hace que la aplicación se muestre al frente", asumo que tienes las partes del flujo de trabajo en su lugar que cierra tu aplicación en base a un tiempo programado.

Suena como que la parte que necesitas resolver es cómo abrir la aplicación después de que se cierre, para que no aparezca en primer plano.

Usando una acción de Ejecutar AppleScript (eliminando cualquier código de ejemplo que pueda estar presente):

ignorando respuestas de la aplicación
    decir a la aplicación llamada "..."
        si no está en ejecución entonces ejecutar
    fin decir
fin ignorando

Debes asegurarte de que la parte de tu flujo de trabajo que cierra la aplicación haya completado antes de intentar un relanzamiento. Si el script anterior se ejecuta mientras la aplicación está en proceso de apagarse, no hará nada.


Para completitud, aquí tienes un ejemplo de script que manejaría el cierre y relanzamiento de una aplicación en segundo plano. Se ejecutaría usando una acción de Ejecutar script de Shell, y asume que tienes zsh instalado:

#!/usr/bin/env zsh
bgreopen () {
        pkill -xi "$*" &&
        osascript <<-OSA
            ignorando respuestas de la aplicación
                decir aplicación "$*" a ¬
                    si no está en ejecución ¬
                    entonces ejecutarlo
            fin ignorando
        OSA
} &>/dev/null

bgreopen Microsoft Teams

Reemplaza "Microsoft Teams" con el nombre de tu aplicación. Utiliza osascript para ejecutar el AppleScript de la parte anterior de esta respuesta, en parte para demostrar su incorporación en una solución más grande, y en parte porque es muy confiable para lanzar aplicaciones en silencio.

El comando shell open tiene una marca de opción -j utilizada para lanzar una aplicación oculta. Ha sido ligeramente menos confiable en el pasado para mantenerse oculto, pero esto fue en una versión anterior del sistema operativo. Si quieres intentar esto en su lugar, en realidad sería un método más ideal ya que mantiene todo ejecutándose en el mismo lenguaje en lugar de llamar y salir a otros lugares. También es una solución mucho más elegante:

#!/usr/bin/env zsh
(){    pkill -ix "$*" &&
       open  -ja "$*"
} &>/dev/null Microsoft Teams

Además, open tiene una marca de opción -g, que específicamente evita que las aplicaciones se muestren al frente al iniciar. Usado independientemente de -j, abriría la aplicación detrás de lo que estás trabajando, pero no necesariamente estaría oculta. La bandera -j debería implicar -g también, pero tal vez no lo hace y explica mi experiencia variada con ella en el pasado. Por lo tanto, puedes experimentar para ver qué funciona para ti, y puedes combinar su uso junto con: open -jga "$*" (asegúrate de que a sea la última de las banderas de opción inmediatamente antes del argumento "$*" que representa el nombre de la aplicación).


Si deseas optimizar la eficiencia de este proceso, puedes buscar launchd. Es el demonio de inicio de macOS que regula la ejecución de programas en un horario, y te permitiría eliminar Automator y las alarmas de calendario de la ecuación. Solo requeriría un archivo .plist que defina con qué frecuencia quieres ejecutar un script, y el cuerpo del script o la ruta a un archivo de script, que simplemente sería el script de shell anterior.

0 votos

@user3439894 Creo que la bandera -j implica la bandera -g, aunque no está documentado como tal, o al menos no parece llevar una lanzamiento de la aplicación oculta al primer plano. Pero es bueno tenerlo en cuenta en caso de que robe la barra de menús en algunas situaciones. Lo agregaré a la respuesta. Gracias.

0 votos

El script de Apple funcionó para mí. Tuve un error (no puedo recordar exactamente cuál en este momento) al usar los scripts de zsh, pero como funcionó la parte del script de Apple, no pasé tiempo solucionando problemas.

0 votos

Suponiendo que estabas usando (o seleccionaste que Automator use) zsh y no bash, entonces los errores habrían sido tipográficos, ya que &>/dev/null evita informar de cualquier error durante la ejecución, lo que significa que fue generado antes de la ejecución como resultado de un error de sintaxis. El candidato probable será el espacio en blanco al principio de la línea en bgreopen cuyos únicos otros caracteres son OSA. Ingresé todas las líneas que comienzan con espacio en blanco haciendo que su primer caracter sea

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