Eu estou tentando configurar uma tarefa de agendamento para executar um exe exatamente uma vez por dia. Eu tentei o seguinte:
Acione diariamente às 4h, "execute a tarefa o mais rápido possível depois que um início programado for perdido"
Essa abordagem funciona perfeitamente se eu não tiver uma senha definida em minha conta, nesse caso o Windows inicializa diretamente na área de trabalho - depois de um pequeno atraso, a tarefa é executada.
Quando adicionei uma senha à minha conta, a tarefa não foi mais executada. No histórico de tarefas, vejo avisos sendo registrados:
O Agendador de Tarefas não iniciou a tarefa "X" porque o usuário "Y" não estava conectado quando as condições de inicialização foram atendidas. User Action: Certifique-se de que o usuário esteja conectado ou altere a definição da tarefa para permitir o início quando o usuário efetuar logoff.
Isso parece um aviso estúpido - sob as "Opções de segurança", eu tenho "Executar somente quando o usuário está conectado" selecionado. Por que o Agendador de Tarefas está tentando iniciar a tarefa antes que o usuário faça logon?
Acione diariamente 4:00 AM e "ao fazer logon", execute o mais rápido possível
Esta abordagem não teve o efeito que eu pretendia, ou seja, eu queria ambos condições para ser verdade, ou seja, se "depois de 4:00 AM diariamente" for true e "log on" for true, execute a tarefa; e para cada evento de "logon" sucessivo daquele dia, o "depois das 4:00 da manhã diariamente" não será verdadeiro, por isso, aguardará o dia seguinte. Infelizmente, não é assim que o Agendador de Tarefas funciona e, com essa abordagem, a tarefa é executada após cada faça logon.
Executar se o usuário está conectado ou não
Eu não posso usar essa abordagem porque o exe que eu estou tentando executar, por vezes, requer entrada do usuário quando estiver concluído. Em geral, há vários motivos pelos quais alguém pode não conseguir usar essa opção.
Outras opções
No campo de soluções desesperadas, estou pensando em escrever um script em lote que irá gravar em um arquivo e ser capaz de detectar se já foi chamado antes.
Certamente, deve haver uma maneira melhor de obter esse caso de uso de agendamento aparentemente comum e simples?
VersionBackup_20160201.txt
e se ele não existir, crie-o e execute o aplicativo. Se existir, então não execute o VersionBackup.exe e saia. Desta forma, você garante por dia, por ex. & lt; AAAAMMDD & gt; que ele só é executado uma vez e cria esse arquivo antes de ser executado. Se você está intested, eu tenho um exemplo de lógica de script que eu adicionarei como uma resposta se você acha que seria potencialmente uma solução que você poderia usar ou pelo menos testar com talvez?