Windows 10: Como executar uma tarefa no espaço do usuário na inicialização sem desbloquear a máquina local?

1

Eu tenho uma máquina que será implantada no local do cliente. A máquina ficará sem cabeça e só será acessada via RDC. (A menos que haja uma catástrofe.) Existe um software que deve ser executado sempre para registrar dados de sensores conectados. O software só funciona quando é executado no "primeiro plano". Isso quer dizer que se eu tenho que iniciar como uma tarefa usando o "Executar se o usuário está conectado ou não" eu posso ver no Gerenciador de Tarefas, mas nenhum dado é registrado. Se eu matá-lo e executar a tarefa através do Agendador de Tarefas, ele ainda não registrará dados. Se eu matá-lo e iniciá-lo através do ícone da barra de tarefas, ele funciona.

Como faço para que este software seja executado na inicialização **? Eu quero fazer isso de tal forma que quando eu RDC em usar um nome de usuário e senha, vejo o aplicativo. No entanto, se alguém conectasse o teclado e o mouse, o computador NÃO estaria desbloqueado.

** Eu tenho o BIOS da máquina configurado para inicializar automaticamente após uma falha de energia.

    
por Bruno Bronosky 07.12.2016 / 07:51

2 respostas

2

Use psexec executado a partir de uma tarefa agendada. Existe uma opção "Quando o sistema é iniciado" no agendador de tarefas. Configure para executar:

psexec -u USERNAME -p PASSWORD -i 0 -d c:\path\to\program.exe

-i 0 diz para executar na sessão 0, que a partir de 2008 é a sessão de console.

    
por 07.12.2016 / 18:37
0

Acabei resolvendo isso com o excelente (se confundido documentado) nssm - o gerente de serviço não-sugador

Eu não sou um administrador do Windows, então me dedico a tornar tudo amigável ao Unix. Espero que isso seja mais útil do que confuso. Aqui está como resolvi isso (e o documentei para o meu futuro).

  1. Instale choco porque é o mais próximo possível de apt ou brew para Windows.
  2. Instale cygwin porque vamos usar o BASH.

    choco install --yes cygwin
    
  3. Instale nssm

    choco install --yes nssm
    
  4. Salve o seguinte em um script que chamarei de create_service.sh

    name='Phone Home'
    command='C:\Program Files\Python35\python.exe'
    arguments='phone_home.py -p 3389'
    start_in='C:\Users\ET\Dropbox\src\' # Edit this shared code have it sync'd via Dropbox FTW!
    domain='.'
    username='ET'
    password='Use SSH and reverse port forwarding!'
    description='Launch Phone Home script at startup for real, not at log on. (Because this machine is headless, and how are you supposed to log in before it phones home?)'
    display_name="00 $name" # make it sort to the top in Services
    
    nssm stop    "$name"
    nssm remove  "$name" confirm
    nssm install "$name" "$command"   $arguments
    nssm set     "$name" AppDirectory "$start_in"
    nssm set     "$name" DisplayName  "$display_name"
    nssm set     "$name" ObjectName   "$domain\$username" "$password"
    nssm set     "$name" Description  "$description"
    nssm start   "$name"
    
  5. "Instale" um serviço do Windows por meio da API nssm apenas chamando o script.

    source create_service.sh
    

NOTA:

Os comandos nssm stop e nssm remove falharão na primeira vez, mas eu os coloco lá para que você possa executar novamente o script para fazer alterações em seu serviço.

Isso tudo indica um sistema muito complexo de execução remota de código e proxy ssh do Microsoft Remote Desktop. Essa é uma lição para outro dia.

    
por 08.12.2016 / 09:51