Por que o “start in” é necessário para as tarefas agendadas do Windows?

2

Desenvolvemos um aplicativo da Web que pode ser implantado no Windows ou no Linux. A implementação do Linux usa o cron, e o Windows usa tarefas agendadas para executar um único script PHP que processa todas as tarefas agendadas para o nosso sistema.

A tarefa está agendada usando schtasks durante o processo de instalação, como:

Isso sempre funcionou tanto no W2003 quanto no W2008. Há uma semana, um cliente relatou que as tarefas agendadas não estavam sendo executadas. Ele está sendo executado no Windows 2008. Verificamos várias vezes e finalmente resolvemos o problema inserindo a pasta que contém o script .vbs como a pasta "start in" da tarefa agendada.

Dito isto, não há como configurar o valor "start in ..." de schtasks sem usar uma definição XML das tarefas. As definições XML não funcionam no Windows 2003, então eu teria que adicionar a detecção de versão do Windows ao instalador, testes adicionais, etc (eu gostaria de evitar isso, se possível).

A única coisa atípica que notei sobre a instalação é que o sistema está instalado em D:\ em oposição ao padrão C:\Program Files (x86)\ , mas não vejo como isso seria importante. Todos os caminhos são absolutos em todos os scripts.

Alguém pode sugerir uma solução razoável para isso?

    
por GomoX 11.09.2012 / 23:37

2 respostas

7

O "início" é principalmente para garantir que, se você tiver caminhos relativos na tarefa para executá-lo, entenda em qual diretório executar o script.

Dito isto, este link pode ajudá-lo: link

    
por 11.09.2012 / 23:45
2

Solução para o quê, exatamente?

O valor start in é exatamente o que parece, o diretório no qual o aplicativo / programa / script é iniciado. Isso é importante para quando ele chama outros recursos. Se ele chamar somecustom.exe que não está no diretório start in , ele não será encontrado e seu aplicativo / programa / script terá um erro. Se você chamar absolutamente tudo pelo caminho, isso não deve importar, mas o comportamento que você está descrevendo parece indicar que ele não está realmente fazendo isso, então você poderia tentar corrigir esse comportamento, ou uma solução rápida (se feia e meio que solução de baixa qualidade para realmente obter o código correto) seria adicionar o diretório à variável %PATH% , para que o Windows sempre verifique o diretório quando um arquivo executável for chamado sem um caminho referenciado.

Se você estiver trabalhando no Windows 2008/7 / Vista, também poderá use um conjunto de chaves no diretório start in com schtasks /v1 , desde que você não esteja tentando executar as tarefas na conta SYSTEM . Acho que prefiro fazer com que o desenvolvedor depure o código dele, mas YMMV.

    
por 11.09.2012 / 23:49