VS2010命令提示符给出错误:无法确定VS Common Tools文件夹的位置


69

我已经安装了VS2010。安装会为VS2010命令提示符创建快捷方式,但是当我打开命令提示符时,出现错误消息:

无法确定VS Common Tools文件夹的位置。

我检查了环境变量VS100COMNTOOLS,它的值是:C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\并且注册表HKEY_local_Machine\Software\Microsoft\Visual Studio\SxS\VS7 设置为:C:\Program Files\Microsoft Visual Studio 10.0\

我检查了VSvars32.bat并尝试添加回显以查找到它继续进行的位置。该命令失败:

@call :GetVSCommonToolsDirHelper32 HKLM > nul 2>&1

第一件事是确认您的PATH不太长,否则Windows会认为它为空(因此该批处理将无法正常工作)。打开一个新的控制台,然后键入PATH。如果得到NULL,则需要除去PATH变量中的某些路径!
Pierluigi 2015年

2
我缺少注册表项。我添加HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7\12.0并将其设置为C:\Program Files (x86)\Microsoft Visual Studio 12.0
Ethan Reesor,2016年

Answers:


59

我遇到了同样的问题,并在这里找到了答案。

问题是bat使用de reg命令,并且在PATH系统变量中搜索该命令。您已经设法以某种方式从PATH变量中获取了“ C:\ Windows \ System32”,所以只需转到系统变量(右键单击“我的电脑”>“属性”>高级配置>“环境变量”,搜索PATH)变量并在末尾添加“ ; ”:C:\ Windows \ System32


13
尝试先输入“ reg查询1”。如果它给您找不到命令,那么您的问题是路径问题。但是,如果出现“错误:管理员已禁用注册表编辑”。然后,如您所见,您遇到了一个管理员错误(这是我的问题,就像我在公司开发箱中一样)。在这种情况下,请将问题提交给您的IT(或您自己,如果可以授予此访问权限)。
Kit10 2013年

谢谢!对我来说,它运行的是SDK的“ setenv.cmd”,它清除了我的环境变量。
default.kramer 2014年

将其添加到PATH之后是否需要重新启动PC?
皮埃尔

不,请关闭命令提示符的当前实例,然后重试
Pierre

2
@Copperpot也遇到了同样的问题。通过以管理员身份运行命令提示符,我能够纠正这种情况。
马特·戴维斯

41

我在两台计算机上遇到了相同的问题:带有Visual Studio Ultimate 2013(VS2013)的Win8.1x64和带有VS2013 Ultimate的Win8x64

问题:指向文件的快捷方式“ VS2012 x86本机工具命令提示符”:C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ vcvarsall.bat,它调用C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ bin \ vcvars32.bat尝试在注册表中搜索值名称“ 11.0”:

reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "11.0"

但是我的机器没有这个值“ 11.0”,而是有“ 12.0”

我的解决方案是运行C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat,它调用C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ bin \ vcvars32.bat,可以正确查询注册表如下:

reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "12.0"

因此,从C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ vcvarsall.bat更改/运行到C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat 就我而言解决了它


1
为11.0添加注册表值也可以。但是,在VS2012 x86本机工具命令提示符中更改目标似乎是解决问题的最佳方法。
娜迦桑迪普2014年

仍在VS2015中使用。我必须在快捷方式中编辑路径,但是当没有将System32添加到路径时,这种方法对我有用。
StuperUser

28

对我来说,这个问题刚刚开始出现,我可以通过更新位于C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \文件夹中的vcvars32.bat文件来“修复”它(默认情况下) 。在第一行之后添加以下内容:

@SET VSINSTALLDIR=c:\Program Files\Microsoft Visual Studio 10.0\
@SET VCINSTALLDIR=c:\Program Files\Microsoft Visual Studio 10.0\VC\
@SET FrameworkDir32=c:\Windows\Microsoft.NET\Framework\
@SET FrameworkVersion32=v4.0.30319
@SET Framework35Version=v3.5

然后注释掉以下几行:

:: @call :GetVSCommonToolsDir
:: @if "%VS100COMNTOOLS%"=="" goto error_no_VS100COMNTOOLSDIR
:: @call "%VS100COMNTOOLS%VCVarsQueryRegistry.bat" 32bit No64bit

在这里找到这个。注意,我说的是用引号引起来,因为我没有检查确保所有适当的变量都已正确设置。也就是说,粗略地看,它确实是有效的。

请注意,您必须在提升权限的文本编辑器中编辑vcvars32.bat文件(即,以Admin身份运行)才能在Vista和Windows 7中保存该文件。


3
必须在列出的目录(VSINSTALLDIR,VCINSTALLDIR,FrameworkDir32)的末尾添加\,但这也解决了我的问题。我没有访问注册表的权限(即使我的登录名配置为本地管理员)也无法查看其中是否存在适当的值,我记得其中一个批处理文件会检查注册表,但据我所知我的其余设置已正确配置,并且仍然需要执行上述操作。
乔什2010年

5
您可能应该使用%ProgramFiles(x86)%环境变量而不是`c:\ Program FIles` -列出的路径不存在,或者是64位计算机上的框架文件夹!
BrainSlugs83 2014年

另外,我发现自己和下面的@javs处于相同的情况-我敢肯定,解决PATH变量问题比编辑vcvars文件的破坏性小(而且更有可能产生其他积极的副作用)...
BrainSlugs83

@ BrainSlugs83 32位系统上缺少此环境变量
Ray Hulha

这解决了我的问题。但是,我不得不添加为VS2013: ,@SET WindowsSdkDir=%ProgramFiles(x86)%\Windows Kits\8.1\ @SET ExtensionSdkDir=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.1\ExtensionsSDKs\ ,。@SET WindowsSDK_ExecutablePath_x86=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\ @SET WindowsSDK_ExecutablePath_x64=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\
LaurinO

10

我的问题是PATH变量中有错字。由于vsvars32.bat使用“ reg”工具查询注册表,因此失败了,因为未找到该工具(仅reg在命令提示符下键入对我来说是失败的)。


6

那是个很棒的帖子。对vcvarsall.bat文件进行所有更改之前,请尝试以管理员身份运行vs2010命令提示符。如果仍然不能解决问题,请尝试将C:\ Windows \ System32添加到PATH环境变量中。如果所有其他方法均失败,请如上所述编辑批处理文件。


以管理员身份运行VS2015命令提示符在Windows Server 2012上也为我工作。谢谢!
Langfo

2

不久前,由于组策略阻止了注册表编辑,所以我遇到了这个问题。

特定的问题是reg被拒绝访问注册表。我通过Microsoft.Win32.Registry在C#程序中复制“ reg.exe”来解决此问题,然后用替代程序替换了对reg的所有调用。您需要更新:

  • VCVarsQuery.bat
  • VsDevCmd.bat
  • VsVars32.bat

%VSxxxCOMNTOOLS%文件夹中(通常解析为C:\ Program Files(x86)\ Microsoft Visual Studio XX.X \ Common7 \ Tools)

    static int Main(string[] args)
    {
        try
        {
            var targetRegistry = args[1].Substring(0, 4);
            var targetKey = args[1].Substring(5);

            string targetValue = null;
            if (args[2].ToLower() == "/v")
            {
                targetValue = args[3];
            }
            else
            {
                return 1;
            }

            var hkey = targetRegistry == "HKLM" ? Registry.LocalMachine : Registry.CurrentUser;
            var key = hkey.OpenSubKey(targetKey);



            var result = key.GetValue(targetValue);
            Console.WriteLine();
            Console.WriteLine(key.Name);
            Console.WriteLine("    {0}    REG_SZ    {2}", targetValue, key.GetValueKind(targetValue), result);
            Console.WriteLine();
            Console.WriteLine();

            return 0;
        }
        catch
        {
            return 1;
        }
    }

在这种情况下,您也可以在此处使用我的替代reg实现。


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能无效
zohar

谢谢,我有同样的问题。
UuDdLrLrSs

1

我面临着同样的问题。我在环境变量中查找了“ PATH”变量,但找不到此变量。然后,我添加了一个变量“ Path”,其值为“ C:\ Windows \ System32”。现在一切都解决了。


1

将路径定向到计算机上的正确位置。此设置假定您将大多数程序安装在中央位置(C:\ Development)。对于我来说,我并没有因此消除对DEV的需求。

@ECHO OFF

set DEV=C:\Development
set QTDIR=%DEV%\Qt
set PATH=%SystemRoot%;%SystemRoot%\system32;%QTDIR%\bin

echo Setting OpenSSL Env.
set OPENSSL=%DEV%\OpenSSL
set PATH=%OPENSSL%\bin;%PATH%
set LIB=%OPENSSL%\lib
set INCLUDE=%OPENSSL%\include

echo Setting NASM Env.
set PATH=%DEV%\NASM;%PATH%

echo Setting DirectX Env.
set LIB=%DEV%\DirectX SDK\Lib\x86;%LIB%
set INCLUDE=%DEV%\DirectX SDK\Include;%INCLUDE%

echo Setting Windows SDK Env.
set WindowsSdkDir=%DEV%\Windows 7.1 SDK
set PATH=%WindowsSdkDir%\Bin;%PATH%
set LIB=%WindowsSdkDir%\Lib;%LIB%
set INCLUDE=%WindowsSdkDir%\Include;%INCLUDE%
set TARGET_CPU=x86

echo Setting MSVC2010 Env.
set VSINSTALLDIR=%DEV%\MSVC
set VCINSTALLDIR=%DEV%\MSVC\VC
set DevEnvDir=%VSINSTALLDIR%\Common7\IDE
set PATH=%VCINSTALLDIR%\bin;%VSINSTALLDIR%\Common7\Tools;%VSINSTALLDIR%\Common7\IDE;%VCINSTALLDIR%\VCPackages;%PATH%
set INCLUDE=%VCINSTALLDIR%\include;%INCLUDE%
set LIB=%VCINSTALLDIR%\lib;%LIB%
set LIBPATH=%VCINSTALLDIR%\lib

echo Setting Framework Env.
set FrameworkVersion=v4.0.30319
set Framework35Version=v3.5
set FrameworkDir=%SystemRoot%\Microsoft.NET\Framework
set LIBPATH=%FrameworkDir%\%FrameworkVersion%;%FrameworkDir%\%Framework35Version%;%LIBPATH%
set PATH=%LIBPATH%;%PATH%

echo Setting Perl Env.
set PATH = C:\Perl\bin;%PATH%

echo Env. ready.

title Qt Framework 4.8.0 Development Kit.

cd %DEV%

将文件另存为* .bat

运行Visual Studio命令提示符,然后执行* .bat。

这应该可以解决所有环境问题,因此请运行configure

编辑 几乎忘记了应归还额度的信用点:http : //developer.qt.nokia.com/wiki/Building_Qt_Desktop_for_Windows_with_MSVC


1

我有同样的问题,但原因不同。我在当前目录中有“ reg.bat”。将其重命名为其他名称即可解决此问题。


这是因为Visual Studio批处理文件将使用reg.exe命令从注册表中获取信息。在您的情况下,您正在屏蔽正确的命令(在Windows / System32中)
Pierluigi 2015年

我也有这个问题。另一个应用程序添加了其包含“ REG.EXE”可执行文件的bin路径。我使用命令where.exe reg.exe找到了外星人“ reg.exe”。从我的环境中删除此路径后,脚本vcvarsall amd64按预期工作。
fgiraldeau

1

因此,我找出了该线程中所有问题的根本原因。我最初以为它特定于2010,但是2013的批处理文件具有相同的令牌解析语法错误。基本上,从2010年到2013年,MS随其编译器分发的所有批处理文件都具有相同的错误。如果在所有.bat文件中搜索此字符串

"%%i"

并替换为

"%%j"

一切都会正常工作。基本上,他们试图在注册表中查询不同的版本条目,以获取要使用的正确路径。它们创建一个for循环,该循环将遍历查询所提取的每一行中的令牌。应该返回三个令牌。他们使用%% i作为第一个REG_SZ,以查看是否找到了某些内容。然后他们使用相同的字符串与版本字符串进行比较。他们应该使用%% j来获取第二个令牌,该令牌应该是8.0或10.0或12.0,并且实际上会产生良好的比较。然后他们正确地使用%% k来获取与版本关联的路径。

再次,执行简单的搜索并替换所有具有以下模式的文件:

@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "12.0"') DO (
    @if "%%i"=="12.0" (
        @SET "VS120COMNTOOLS=%%k"
    )
)

并使其如下所示:

@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "12.0"') DO (
    @if "%%j"=="12.0" (
        @SET "VS120COMNTOOLS=%%k"
    )
)

通过将引号中%% i的第二次出现更改为%% j。

希望这可以帮助!


1

当我安装python库时,对我来说发生了同样的问题,它说无法找到Visual Studio 2008/10的路径。我已经从环境变量更改了路径。因此,要对其进行更改,可以采用以下过程:Start => Computer => Properties => Advance System Settings => Environment Variables => System Variables。在这里,您将找到路径变量。如果已经设置了一些路径,则可以使用分号(;)添加给定的路径“ C:\ Windows \ System32 ”,否则直接添加相同的路径。


0

尝试在构建计算机上通过Powershell运行发布过程时遇到相同的错误。

我的构建计算机仅安装了Windows SDK,而没有安装Visual Studio,因此,似乎缺少安装Visual Studio时通常存在的一些常见文件和注册表值。在更仔细地研究了vsvars32.bat之后,我注意到在GetVSCommonToolsDir标签下报告了“无法确定VS Common Tools文件夹的位置”错误。似乎在此批处理文件中,由于我的计算机上不存在VS7子项,因此它会清空%VS100COMNTOOLS%环境变量,并报告指定的错误。

就我而言,似乎是因为我没有在我的构建机器上安装Visual Studio或某些其他必需的组件,所以该错误正在我身上发生,因此注册表项不存在。也许您的错误是由于诸如32位vs 64位注册表或32位vs 64位VS命令提示符之类的东西引起的?直接在命令提示符下测试从批处理中失败的代码行,应为您提供有关注册表或文件路径无法正确解析的线索。


是的,仅使用Win SDK 7.1(未安装Visual Studio)时,我发现完全一样的东西。奇怪的是,构建继续正常进行,因此在我的情况下,这看起来像是误报,但我忽略了。
Hitobat 2014年

0

当我安装创建了用户环境PATH变量的东西时,我遇到了这个问题。我的TeamCity构建代理以我自己的用户名作为服务运行,它找到了用户PATH变量而不是机器PATH变量。使用错误的路径变量,它什么也找不到,并给出了此错误。


0

对我来说,这是由于PATH环境变量为我的用户个人资料设置为空值引起的。系统变量设置正确,因此我从配置文件中删除了空白的PATH变量,然后一切又恢复了。


0

我遇到了只使用Microsoft Windows SDK v7.1批处理文件SetEnv.Cmd的讨厌的野兽-即:我没有安装Visual Studio vAny,也不必使用任何特别准备的cmd提示(其中vsvars32.bat等人抬起头来)。我只安装了Windows 7(7.1)Microsoft Windows SDK及其C / C ++编译器。在我的Xp64机器上,这是我用来编译2010年6月DirectX SDK音频样本之一的顺序:

REM open a regular old cmd.exe and run these 3
REM this builds the Win32 (ie: x86) version of the exe

cd "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\XACT\Tutorials\Tut02_Stream"

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /debug /x86 /xp

"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" Tut02_Stream_2010.sln /p:Configuration=Debug /p:Platform=Win32

请注意,使用Framework64版本的MSBuild.exe会使我无法构建X64版本(由于目标?),但是MSBuild的X86版本成功地构建了同一教程exe的X64版本:

REM open a regular old cmd.exe and run these 3
REM this builds the X64 version of the exe

cd "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\XACT\Tutorials\Tut02_Stream"

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.Cmd" /debug /x64 /2003

"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" Tut02_Stream_2010.sln /p:Configuration=Debug /p:Platform=X64

0

我也面临同样的问题。最初尝试修改无法解决的系统路径。后来通过安装Micro Visual Studio Express解决了。


0

在我们的Windows 7构建系统上进行构建时,我遇到了同样的问题。自从从Windows XP迁移到32位Windows 7以来,这是我第一次这样做。我们构建系统的IT要求已将权限锁定在很难执行大多数常规操作的位置。事实证明,该问题是由于缺少特权提升所致。通过关闭Visual Studio 2010并使用管理员权限(以管理员身份运行)重新打开它,此问题已得到解决。


0

因此,这可能要晚一些,但是实际问题是一个错误,或者是三个批处理文件中相同错误的重复。

C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ Tools \ VCVarsQueryRegistry.bat

C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ Tools \ vsvars32.bat

C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ vcvars32.bat

错误模式无处不在,for循环用于遍历注册表值。看起来像这样:

@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "10.0"') DO (
    @if "%%i"=="10.0" (
        @SET "VS100COMNTOOLS=%%k"
    )
)

问题是%% i的第二次出现。循环构造的工作方式是第一个%%变量是第一个标记,第二个是第二个标记,依此类推。因此,第二个%% i应该是%% j(或您想要的任何值),以便它指向可能为“ 10.0”的值。您可以告诉开发人员想要使用i,j,k作为值,因为在if中的@SET中,他们使用%% k。这将是路径。

因此,简而言之,请遍历上面三个文件中的所有这些类型的循环,并将第二次出现的%% i更改为%% k,一切将按预期进行。所以它应该看起来像这样:

@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "10.0"') DO (
    @if "%%j"=="10.0" (
        @SET "VS100COMNTOOLS=%%k"
    )
)

希望这可以帮助。不知道这是否适用于所有版本。我只知道它确实适用于VS 2010(SP1)。


也发生在2013年。很奇怪。那么,为什么人们在ms中没有给出正确的脚本?而用你的方式还是错误的。你可以看看stackoverflow.com/questions/23967256/...

0

以上都不解决我的问题。

我在“ Path”或“ PATH”环境变量中添加了“ C:/ Windows / System32”。我可以用reg /?命令。我还运行了“ vcvarsall.bat”文件,没有错误消息。

我的错误是我运行的是VS2012交叉工具命令提示符,而不是VS2013交叉工具命令提示符

原因是开始菜单中的文件结构。2010和2012年是在'微软的Visual Studio'和2013年在“Visual Studio的YEAR '。我只是没有意识到这一点。:/

我希望这可以帮助别人。


0

就我而言,我将安装VS.Net 2015 Update 2,并取消选中Windows 8.1 SDK框(因为我现在使用Windows 10,并且认为没有必要)。但是,这似乎导致省略了某些必需的注册表设置。

从控制面板修改VS.Net 2015并选中8.1 SDK框可解决此问题。


0

另一个原因可能是VS 2013 Community Update 5安装了错误的快捷方式;它为VS 2013安装VS 2012快捷方式。

要修复它,请编辑快捷方式。将它们从2012年重命名为2013年,然后在vcvarsall的路径中将“ 11”更改为“ 12”。

请参阅此Microsoft社交文章


0

我在Windows XP上使用Visual Studio 2010遇到同样的问题。只需删除所有构造:

> nul 2>&1

来自文件:

\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat
\Microsoft Visual Studio 10.0\Common7\Tools\VCVarsQueryRegistry.bat

0

在开发人员命令提示符和cmd中解决此问题的简单解决方案是添加以下行

C:\ Windows \ System32

进入系统路径如下:

我的PC->属性->高级->环境变量->系统变量希望它能解决问题。


0

我的问题有点不同。正如@kzfabi所提到的-进行注册表获取已安装VS版本的详细信息。因此,执行开发人员命令行工具exe的用户需要管理员访问权限以及注册表编辑权限。在公司设置的受控环境中,您可能没有这些权利并导致此错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.