Я создал командный файл, который запускается при успешной сборке проекта winforms C # в Visual Studio 2015 (выпуск 3 для сообщества). В этом пакетном файле я хочу убедиться, что некоторые другие исполняемые файлы в данный момент не запущены.
Для этого пакетный файл содержит строки, похожие на:
tskill notepad
Когда я строю, пакетный файл выполняется, но вывод читает (частично):
'tskill' is not recognized as an internal or external command,
operable program or batch file.
Однако я могу запустить командный файл из командной строки cmd вне Visual Studio, и он работает как положено (уничтожает указанные исполняемые файлы без сообщений об ошибках).
Я попытался исключить очевидные вещи: используя полный путь к tskill
, убедившись, что tskill
действительно существует в c:\windows\system32
и что этот каталог находится на пути.
Я также добавил ECHO %path%
в пакетный файл, чтобы сравнить путь при вызове из VS, а также из командной строки - путь одинаков в обоих случаях.
Я закрыл и перезапустил Visual Studio с правами администратора - те же результаты.
Итак: Почему пакетный файл, вызываемый из Visual Studio, не находит файл c:\windows\system32\tskill.exe?
(Примечание: я знаю, что taskkill существует и является аналогичной утилитой, этот вопрос не об альтернативах tskill, а о том, почему VS не может его найти.)
Изменить: чтобы уточнить вопросы от комментатора: сообщается об одной и той же ошибке, использую ли я полный путь к файлу или только имя исполняемого файла. Моя текущая системная переменная окружения% path% имеет длину 1564 символа (максимальное значение по умолчанию для windows 7 - 2047). Пакетный файл работает правильно, когда запускается как пользователь без повышенных прав вне Visual Studio из командной строки.
Редактировать 2: выполнил следующий тест. 1) открыть блокнот, 2) из командной строки с повышенными правами вызвать tskill с полным путем к exe, 3) убедиться, что блокнот больше не работает.
Редактировать 3: я добавил строку, where tskill
в мой пакетный файл, чтобы увидеть, вызывал ли он неправильный файл. Из командной строки командный файл выводит: C:\Windows\System32\tskill.exe
. Из Visual Studio эта строка выводит: INFO: Could not find files for the given pattern(s)
.
Изменить 4: В соответствии с предложением в комментариях я попытался использовать командную строку разработчика для VS2015. Хотя переменная% path% была длиннее, другое поведение было таким же (например, она могла найти tskill в c:\windows\system32 как из пакета, так и из командной строки.)