LaunchAgent plist para manter um aplicativo em execução e hiden

1

Estou usando o seguinte 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 executar um aplicativo mesmo quando ele falha, mas depois que o sistema é reiniciado, o foco muda para esse aplicativo específico. Como posso melhorar o script para executar o aplicativo escondido ou minimizado? Seria mais fácil escrever o applescript para ele e executá-lo como serviço?

Obrigado por suas sugestões;)

    
por Baugi 19.04.2013 / 20:04

2 respostas

0

Eu tenho um script que resolve um problema semelhante, e aqui está uma versão modificada que foi testada em vários aplicativos 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

Observe que esse script deve ser salvo como um aplicativo "permanecer aberto" e pode ser adicionado à sua lista de itens de inicialização para que seja carregado automaticamente quando você reiniciar o sistema.

Quando estiver em execução, o script fará o seguinte:

  • Verifique os processos em execução para ver se seu aplicativo está aberto.
  • Se o seu aplicativo não estiver na lista, ele será aberto em segundo plano com o comando do shell script "open -g .
  • Se o aplicativo estiver aberto, ele ocultará a janela principal.
  • O manipulador on idle verificará automaticamente a cada 30 segundos. Se você quiser ter um atraso maior, adicione return e o número de segundos que deseja que o script aguarde antes de verificar novamente (por exemplo, return 300 por cinco minutos). Isso deve ser adicionado antes de end idle

Eu uso esta informação para esconder a doca ícone para o aplicativo e executá-lo completamente em segundo plano.

    
por 01.02.2014 / 18:41
0

Por exemplo, salve 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>

Em seguida, execute launchctl load ~/Library/LaunchAgents/some.label.plist .

Você também pode usar open -jga Mail ou pgrep -qx Mail||open -jga Mail em vez de lsappinfo launch launchandhide=true nofront=true /Applications/Mail.app . open -jg abre um aplicativo oculto e sem torná-lo mais frontal, exceto que, para alguns aplicativos como o Mail e o TextEdit, ele cria uma nova janela visível se o aplicativo estiver em execução, mas não tiver janelas abertas. Para esses aplicativos, você pode usar pgrep para verificar se o aplicativo já está aberto.

lsappinfo foi adicionado em 10.9. open -j e pgrep foram adicionados em 10.8.

    
por 03.02.2014 / 22:50