我创建了一个批处理文件,该文件在 Visual Studio 2015 (社区版更新 3) 中成功构建 C# winforms 项目后运行。在该批处理文件中,我想确保某些其他可执行文件当前未运行。
为此,批处理文件包含类似以下内容的行:
tskill notepad
当我构建时,批处理文件执行,但输出内容为(部分):
'tskill' is not recognized as an internal or external command,
operable program or batch file.
但是,我可以从 Visual Studio 之外的 cmd 提示符运行批处理文件,并且它可以按预期工作(终止指定的可执行文件且没有报告错误)。
我尝试排除显而易见的东西:使用完整路径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% 变量更长,但其他行为相同(例如,它可以从批处理和命令行中找到 c:\windows\system32 中的 tskill。)