Situação
Eu tenho um script em lote que prepara alguns arquivos, executa um programa ( .exe
) e exclui os arquivos.
Essa tarefa deve ser executada a cada hora, por isso estou tentando configurar isso usando Tarefas agendadas. O problema é que o programa mencionado anteriormente não é executado corretamente quando chamado da tarefa (nem pelo .bat
script nem ao chamar .exe
diretamente), mas não recebo nenhuma mensagem de aviso ou erro nos logs.
Configuração
A tarefa está configurada para ser executada como uma Conta de Serviço do Windows com todos os privilégios definidos corretamente. Ao usar esta conta para efetuar logon via RDP, posso executar o .bat
e .exe
diretamente sem problemas, mas ainda assim a tarefa parece não fazer nada. Isso é facilmente observado porque o programa sempre modifica um arquivo e o carimbo de data / hora modificado não muda na tarefa.
Nos logs de tarefas agendadas, recebo as mensagens informativas da tarefa iniciando um processo, saindo, etc. O "código de resultado", no entanto, é 111
(tentei pesquisar no Google sem sorte, a única associação que recebo é "nome do arquivo é muito longo ", que é um AFAIK completamente irrelevante). Nos logs do aplicativo, não recebo absolutamente nada.
O que eu suspeito é o problema
O programa é uma monstruosidade antiga que gera algum tipo de tela inicial (na verdade é uma janela normal), mesmo que a GUI não seja necessária porque não requer interação e se fecha após as operações. A janela aparece por cerca de 2 segundos.
Suspeito que esse requisito para uma GUI tenha algo a ver com a falha da tarefa, mas não tenho certeza. Quando efetuo login com o usuário sob o qual a tarefa é executada (via RDP), nenhuma janela aparece quando inicio a tarefa agendada.
Edite sobre a GUI
Eu criei um executável C # muito pequeno que inicia o programa sem a janela principal (usando ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden
). Mesmo assim, a tarefa agendada ainda não consegue iniciar o programa corretamente, mas o código de retorno é agora 0
.
Atualizar
Quando configuro a tarefa para dizer "execute se o usuário está conectado ou não" e a run with highest privileges
opção está desmarcada , o valor do erro é 2147943859
.
O que posso fazer para solucionar problemas?
SO = Windows Server 2008 R2 SP1
Se mais informações forem necessárias, entre em contato nos comentários.
.exe
"programa" com parâmetros de dentro de um script, a entrada deve ser fornecida adequadamente como argumento.Respostas:
Acredito que seu problema esteja relacionado às permissões da conta que está sendo usada para executar a tarefa ou ao contexto da conta existente ao tentar executar a tarefa.
Teste para requisito de sessão do console
É possível que o .EXE precise ser executado na
Console
sessão (também conhecida como Sessão 0) no computador. Para testar isso:QWINSTA
, observe aSESSIONNAME
coluna e confirme se o>
indicador está próximo aconsole
, ou seja, deve aparecer como>console
)Se a tarefa for executada corretamente, tente agendá-la
SCHTASKS.EXE
usando o/IT
parâmetro Caso contrário, você pode não ter outra opção a não ser configurar o computador para fazer logon automaticamente como sua conta de usuário de serviço e executar a tarefa como um programa de inicialização.Verificar permissões
Além disso, como já sugeri, verifique o seguinte para confirmar se a conta usada para executar a tarefa está devidamente autorizada:
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignments
)Effective Permissions
guia em Propriedades do arquivo / pasta emSecurity > Advanced
Itens adicionais a serem verificados / experimentados
Adicione algum log ao seu arquivo em lotes. Depois de cada linha executada, faça com que ela grave alguma saída em um arquivo de log para que você saiba onde está ficando preso. Por exemplo:
Tente executar o arquivo .exe com
START
, por exemploSTART "myTitle" "C:\full\path\to\my.EXE"
fonte
Estou respondendo a uma postagem antiga, caso isso ajude outra pessoa. Eu tive o mesmo problema. O log de eventos dizia que o programa era concluído normalmente, mas nem mesmo a primeira linha de código gravaria no log para mim. Acabou sendo a opção "Iniciar em" no Agendador de tarefas. Ocorreu-me que o programa funcionava bem na linha de comando quando eu estava no diretório atual. Existem arquivos de manifesto e outras dependências no mesmo diretório. Portanto, se você solicitar que o trabalho agendado inicie no mesmo diretório que o EXE, poderá obter resultados favoráveis. Foi a solução para mim.
fonte
talvez isso ajude você?
/programming/6939548/a-workaround-for-the-fact-that-a-scheduled-task-in-windows-requires-a-user-to-be
Tivemos um problema semelhante e sua única solução foi criar uma conta especial no servidor com o logon automático. Portanto, se a tarefa foi executada no usuário já conectado, nosso .exe funcionou bem ...
Eu sei que essa não é uma solução muito boa, mas para nós foi a única coisa que funcionou. Eu não sei se isso funciona para você ... (Mas, com essa solução, você deve verificar se o usuário está realmente conectado o tempo todo ...)
fonte
Windows Vista/Windows Server 2008
ou outroWindows 7/Windows Server 2008 R2
. Parece não fazer diferença.Os funcionários da empresa que administra os servidores de nossos clientes disseram que um programa de GUI não seria executado por meio de tarefas agendadas de forma alguma.
Eles usam um sistema de monitoramento que também possui recursos de agendamento de tarefas. Eles definiram isso através disso e parece funcionar.
Lamento não ter tido a oportunidade de avaliar mais sugestões aqui, mas obrigado por tentar ajudar de qualquer maneira. Espero que ajude outras pessoas no futuro, o que acho que certamente ajudará.
fonte
Eu estava tentando iniciar um programa VB6 antigo usando o agendador de tarefas em um servidor Windows 2008 R2. O aplicativo seria executado a partir do exe, via arquivo em lotes ou clicando em um atalho, mas não seria executado no agendador de tarefas. Descobri que quando os arquivos de configuração do aplicativo, armazenados na pasta de aplicativos no diretório C: \ Arquivos de Programas (x86), foram copiados para a pasta do aplicativo em c: \ programdata. o agendador trabalhou. parece que o cmd.exe aplica a configuração de um local diferente daquele usado pelo agendador de tarefas. Se o seu aplicativo tiver arquivos de configuração, tente movê-los para a pasta c: \ programdata \ application.
fonte
Você está fazendo referência a alguma unidade de rede mapeada em seu script ou programa? Há algum tempo, tive um problema semelhante em que minha tarefa agendada não era executada e não conseguia descobrir o porquê. Alterar o (s) caminho (s) para UNC resolveu isso para mim.
Mude
T:\Apps\MyProgram.exe
para\\MyServer\MyShare\Apps\MyProgram.exe
fonte
C:
unidade local .2147943859 convertido em Hex é 800705b3, que uma rápida viagem ao Google indica: "Não foi possível iniciar o programa de instalação no computador. Esta operação requer uma estação de janela interativa".
Agora, pode haver alguma maneira de fazê-lo funcionar interativamente sem usar o PSEXEC (da Sysinternals), mas como eu já sei como fazê-lo via PSEXEC, é isso que eu usaria.
PSExec: http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
Portanto, altere sua ação para acrescentar tudo com psexec.exe -i (e -h se você precisar dele elevado) e deve funcionar.
Eu tentei isso no Windows Server 2008 R2 SP1 com o seguinte na minha 'ação':
e então os parâmetros:
Quando executo a tarefa manualmente (já que não tenho agendamento), recebo um bloco de notas elevado em execução na minha sessão atual.
fonte
Talvez a resposta a esta pergunta ajude alguém a ler este tópico?
/programming/32589381/
Resumo: as Tarefas agendadas do Windows 2012 não veem as variáveis de ambiente corretas, incluindo
PATH
a conta na qual a tarefa está definida para execução.Eu li tudo isso por um longo tempo antes de descobrir o que foi dito acima. (Qual foi o meu próprio problema, levando à mesma pergunta do OP.)
Depois que você (finalmente!) Sabe disso, é bastante fácil testá-lo (como na resposta do stackoverflow), ver isso acontecendo e contornar isso ....
fonte