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?Respostas:
Ok, então o exemplo abaixo, com uma lógica de script em lote muito básica e simples, como você afirmou no comentário, pode ser útil no seu caso por problemas que você está enfrentando.
Também farei referência a outro post (na parte inferior desta resposta) no Agendador de Tarefas com o método getcha, etc. para o caso de problemas com o Agendador de Tarefas não funcionarem como esperado ao executar o script em lote. Mesmo que as opções escolhidas especificamente na configuração possam ser diferentes, assim como o sistema operacional, as pegadinhas nesse nível provavelmente são as mesmas, então dê uma olhada rápida nesse post também se você tiver problemas com o agendamento em lote com o Agendador de Tarefas não funcionando como esperado.
Repartição básica de script
o
FOR /F
loop cria oYYYYMMDD
variável a ser usada para a data atual.o
CheckDir
é um caminho de unidade local ou até mesmo um caminho UNC de\\servername\sharename\folder
que você vai colocar este pequeno arquivo de verificação com oYYYYMMDD
parte de seu nome de arquivo a cada dia.C:\Path
ou conecte o caminho UNC para onde isso precisa apontar em seu ambienteo
checkfile
é apenas o nome do arquivo com o%CheckDir%\
na frente dele e do%DT%
anexado ao final antes da extensão .txt. Por exemplo, vai dar-lhe um resultado final deC:\Path\VersionBackup_20130202.txt
por hoje como no meu exemplo.o
START "" "C:\Path\VersionBackup.exe"
só precisa apontar para o caminho completo onde existe o nome EXE que faz a operação de backup de versão.Exemplo de script em lote
fonte
FOR /F "TOKENS=1-3 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%A%%B%%C"
Solte o arquivo .exe em uma das seguintes pastas para executá-lo quando o computador for inicializado. Você não precisará fazer nada no Agendador de Tarefas.
Apenas para o usuário atual:
Para todos os usuários:
Espero que isto ajude!
fonte