1 votos

LaunchAgent plist para mantener una aplicación en funcionamiento y oculta

Estoy usando el siguiente script

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>my.script.keeprunning</string>
    <key>KeepAlive</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
       <string>/path/to/file</string>
    </array>
</dict>
</plist>

para ejecutar una aplicación incluso cuando se bloquea, pero después de que el sistema se reinicie el foco cambia a esa aplicación específica. ¿Cómo puedo mejorar el script para ejecutar la aplicación oculta o minimizada? ¿Sería más fácil escribir un applescript para ello y ejecutarlo como servicio?

Gracias por sus sugerencias ;)

0voto

unforswearing Puntos 64

Tengo un script que resuelve un problema similar, y aquí hay una versión modificada que ha sido probada en varias aplicaciones diferentes.

on idle
    tell application "System Events"
        set pName to the name of every process
        if pName does not contain "MY APPLICATION" then
            do shell script "open -g /Applications/MY APPLICATION.app"
                                        -- or wherever your application is
        else if pName contains "MY APPLICATION" then
            set makeFalse to visible of window 1 of application "MY APPLICATION"
            if makeFalse is true then set visible of window 1 of application "MY APPLICATION" to false
        end if
    end tell
end idle

Tenga en cuenta que este script</strkeep><strkeep> debe guardarse como una aplicación "que permanece abierta", y puede añadirse a su lista de elementos de inicio para que se cargue automáticamente cuando reinicie su sistema.

Una vez que se ejecuta, el scripthará lo siguiente:

  • Compruebe los procesos en ejecución para ver si su aplicación está abierta.
  • Si tu aplicación no está entre la lista, la abrirá en segundo plano con el botón do shell script "open -g comando.
  • Si la aplicación está abierta, ocultará la ventana principal.
  • El on idle se comprobará automáticamente cada 30 segundos. Si quieres tener un retraso mayor, puedes añadir return y luego el número de segundos que desea que el script espere antes de volver a comprobarlo (por ejemplo return 300 durante cinco minutos). Esto debe añadirse antes de end idle

Yo uso esta información para ocultar el icono del dock de la aplicación y hacer que se ejecute completamente en segundo plano.

0voto

Dave Puntos 986

Por ejemplo, guarde este plist como ~/Library/LaunchAgents/some.label.plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>some.label</string>
  <key>ProgramArguments</key>
  <array>
    <string>lsappinfo</string>
    <string>launch</string>
    <string>launchandhide=true</string>
    <string>nofront=true</string>
    <string>/Applications/Mail.app</string>
  </array>
  <key>StartInterval</key>
  <integer>60</integer> <!-- run the program every 60 seconds -->
</dict>
</plist>

A continuación, ejecute launchctl load ~/Library/LaunchAgents/some.label.plist .

También puede utilizar open -jga Mail o pgrep -qx Mail||open -jga Mail en lugar de lsappinfo launch launchandhide=true nofront=true /Applications/Mail.app . open -jg abre una aplicación oculta y sin hacerla frontal, excepto que para algunas aplicaciones como Mail y TextEdit, crea una nueva ventana visible si la aplicación se está ejecutando pero no tiene ninguna ventana abierta. Para esas aplicaciones, puede utilizar pgrep para comprobar si la aplicación ya está abierta.

lsappinfo se añadió en 10.9. open -j y pgrep se añadieron en 10.8.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: