Eu criei um arquivo em lotes que é executado após a criação bem-sucedida de um projeto de winforms C # no Visual Studio 2015 (atualização 3 da edição da comunidade). Nesse arquivo em lote, quero garantir que alguns outros executáveis não estejam em execução no momento.
Para esse fim, o arquivo de lote contém linhas semelhantes a:
tskill notepad
Quando eu construo, o arquivo em lote é executado, mas a saída lê (em parte):
'tskill' is not recognized as an internal or external command,
operable program or batch file.
No entanto, posso executar o arquivo em lote a partir de um prompt de cmd fora do Visual Studio e ele funciona conforme o esperado (mata os executáveis especificados sem erros relatados).
Eu tentei excluir coisas óbvias: usando o caminho completo para tskill
, certificando-se de que tskill
exista no diretório c:\windows\system32
e que esse diretório esteja no caminho.
Eu também adicionei ECHO %path%
ao arquivo em lote para comparar o caminho quando chamado do VS, bem como de uma linha de comando - o caminho é idêntico em ambos os casos.
Fechei e reiniciei o Visual Studio em execução como administrador - os mesmos resultados.
Então: Por que um arquivo em lotes chamado do Visual Studio não pode encontrar c: \ windows \ system32 \ tskill.exe?
(Nota: estou ciente de que o taskkill existe e é um utilitário similar, esta pergunta não é sobre alternativas para o tskill, mas sim porque o VS não pode encontrá-lo.)
Editar : para esclarecer as dúvidas de um comentarista: o mesmo erro é relatado se eu usar o caminho completo para o arquivo ou apenas o nome do executável. Minha variável de ambiente do sistema% path% atual tem 1564 caracteres de comprimento (o padrão máximo para o windows 7 é 2047). O arquivo em lotes funciona corretamente quando executado como um usuário não elevado fora do Visual Studio a partir de uma linha de comando.
Editar 2 : realizou o teste a seguir. 1) Abra o bloco de notas, 2) do prompt de comando elevado chamar tskill com o caminho completo para exe, 3) verificar o bloco de notas não está mais em execução.
Editar 3 : eu adicionei a linha where tskill
ao meu arquivo de lote para ver se ele estava chamando o arquivo errado. Em um prompt de comando, o arquivo em lote gera: C:\Windows\System32\tskill.exe
. De dentro do Visual Studio, a linha gera: INFO: Could not find files for the given pattern(s)
.
Editar 4 : por sugestão nos comentários, tentei usar o prompt de comando do desenvolvedor para o VS2015. Embora a variável% path% tenha sido mais longa, outro comportamento foi o mesmo (por exemplo, ela pode encontrar tskill em c: \ windows \ system32 tanto de um lote quanto da linha de comando).