VS2010命令提示符给出错误:无法确定VS公用工具文件夹的位置

我已经安装了VS2010。 安装创buildVS2010命令提示符的快捷方式,但是当我打开命令提示符时,我得到错误:

无法确定VS通用工具文件夹的位置。

我检查了环境variablesVS100COMNTOOLS,它的值为: C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\HKEY_local_Machine\Software\Microsoft\Visual Studio\SxS\VS7的registry被设置为: C:\Program Files\Microsoft Visual Studio 10.0\

我检查了VSvars32.bat,并试图添加回声find它继续。 它在这个命令失败:

 @call :GetVSCommonToolsDirHelper32 HKLM > nul 2>&1 

我有同样的问题,并在这里find答案。

问题是蝙蝠使用de reg命令,并在PATH系统variables中search该命令。 不知何故,你已经设法从PATHvariables中获得“C:\ Windows \ System32”,所以只要进入系统variables(右键点击“我的电脑”>“属性”>高级configuration>“环境variables”variables并在最后加上“ ; ”分隔: C:\ Windows \ System32

我在两台机器上遇到同样的问题:使用Visual Studio Ultimate 2013(VS2013)的Win8.1×64和使用VS2013终极的Win8x64

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

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

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

我的解决scheme是运行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正确查询registry如下:

 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解决了它在我的情况

同样的问题刚刚开始发生,我可以通过更新位于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 

在这里find这个。 请注意,我说修复引号,因为我没有检查,以确保所有适当的variables设置正确; 说,匆匆一瞥,似乎是有效的。

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

我遇到的问题是PATHvariables中的拼写错误。 由于vsvars32.bat使用“注册”工具来查询registry,它是失败的,因为没有find该工具(只是在命令提示符下inputreg是失败的)。

这是一个伟大的职位。 在对vcvarsall.bat文件进行所有更改之前,请尝试以pipe理员身份运行vs2010命令提示符。 如果仍然不能解决问题,请尝试将C:\ Windows \ System32添加到PATH环境variables中。 如果一切都失败了,按照上面的描述编辑batch file。

由于registry编辑被组策略阻止,我不久之前就已经这样做了。

具体问题是registry被拒绝访问registry。 我通过在C#程序中使用Microsoft.Win32.Registry复制'reg.exe'来解决这个问题,然后用我的替代程序replace所有的调用来注册。 您需要更新:

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

%VSxxxCOMNTOOLS%文件夹(通常parsing为类似于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实现。

我面临同样的问题。 我看着环境variables“PATH”variables我找不到这个。 然后,我添加了一个variables“path”与“C:\ Windows \ System32”值。 现在一切都解决了。

将path指向您计算机上正确的位置。 这个设置假定你有大多数程序安装在一个中央位置(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

我有同样的问题,但不同的原因。 我在当前目录中有“reg.bat”。 重新命名为其他任何东西解决了这个问题。

所以,我找出了这个线程中所有问题的根本原因。 我原本以为这是特定于2010年,但2013年的batch file有相同的令牌parsing语法错误。 基本上,MS从2010年到至less2013年分发的所有batch file都有同样的错误。 如果您search该string的所有.bat文件

 "%%i" 

并用其replace

 "%%j" 

一切都会正常工作。 基本上他们正试图查询registry的不同版本条目,以获得正确的path使用。 他们创build一个for循环,它将遍历查询所引用的每行代码。 有三个令牌应该回来。 他们使用%%我第一个将是REG_SZ,看看是否有东西被发现。 然后他们使用相同的版本与版本string进行比较。 他们应该使用%% j来获得第二个令牌,即8.0或10.0或12.0,实际上会产生一个很好的比较。 然后他们正确地使用%% k来获得与版本相关的path。

再次,做简单的search,并replace所有这样的模式的文件:

 @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。

希望这可以帮助!

iI在安装python库时发生了同样的问题,它说无法findVisual Studio 2008/10的path。 我已经改变了环境variables的PATH。 所以要改变它,你可以采用以下过程:开始=>计算机=>属性=>提前系统设置=>环境variables=>系统variables。 在这里你会findpathvariables。 如果已经设置了一些path,则可以使用分号(;)来添加给定path“ C:\ Windows \ System32 ”,否则直接添加相同的path。

当我试图通过构build机器上的powershell运行发布过程时,我遇到了同样的错误。

我的生成机器只安装了Windows SDK,而不是Visual Studio,因此似乎缺less安装Visual Studio时通常存在的一些常见文件和registry值。 仔细观察vsvars32.bat之后,我发现它是GetVSCommonToolsDir标签下的“不能确定VS公用工具文件夹的位置”错误的地方。 看来在这个batch file中,由于VS7子键在我的机器上不存在,所以它清空了%VS100COMNTOOLS%环境variables并报告指定的错误。

在我的情况下,似乎这个错误发生在我身上,因为我的生成机器上没有安装Visual Studio或其他必要的组件,因此registry项不存在。 也许你的错误是由于类似的东西,如32位与64位registry或32位与64位VS命令提示符? 直接在命令提示符下直接testing批处理失败的代码行应该给你一个关于为什么registry或文件path没有被正确parsing的线索。

当我安装了创build用户环境PATHvariables的东西时,我遇到了这个问题。 我的TeamCity构build代理作为一个服务在我自己的用户名下运行,它find了用户PATHvariables而不是机器PATHvariables。 用错误的pathvariables,它找不到任何东西,并给出了这个错误。

对我而言,这是由于PATH环境variables被设置为我的用户configuration文件的空值。 系统variables设置正确,所以我从我的configuration文件中删除了空白的PATHvariables,一切工作。

我只有微软Windows SDK v7.1batch fileSetEnv.Cmd – 即:我没有安装Visual Studio vAny并且不必使用任何特殊准备的cmd提示(其中vsvars32.bat等他们丑陋的头)。 我只有安装了C / C ++编译器的Windows 7(7.1)Microsoft Windows SDK 。 在我的Xp64机箱上,这是我用来编译2010年6月DirectX SDKaudio示例之一的序列:

 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 

请注意使用MSBuild.exe的Framework64版本阻止我构buildX64版本(由于目标?),但MSBuild的X86版本成功构build相同的教程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 

我也面临同样的问题。 最初尝试修改系统PATH,没有解决。 稍后通过安装Micro Visual Studio Express解决。

我在Windows 7构build系统上构build时遇到了同样的问题。 我正在填补我们的构build工程师的缺席,这是我们从Windows XP迁移到Windows 7 32位以来的第一次。 我们的构build系统的IT要求已经将权限locking在很难做最常规操作的地方。 事实certificate,问题是由于缺乏提升的特权。 通过closuresVisual Studio 2010并使用pipe理员权限重新打开它(以pipe理员身份运行),问题已修复。

所以这可能是迟到晚了,但实际的问题是一个错误,或者说是在三个batch file中重复相同的错误。

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循环用于循环registry值。 它看起来像这样:

 @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的第二次出现。 循环结构的工作方式是第一个%%variables是第一个标记,第二个是第二个标记,依此类推。 所以第二个%%我应该是一个%% j(或任何你想要的),以便它指向的值可能是一个“10.0”。 你可以告诉开发者想使用i,j,k作为值,因为在if里面的@SET中使用%% k。 这将是path。

因此,简而言之,通过上述三个文件中的所有这些types的循环,将%% 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)。

以上都没有解决我的问题。

我在“Path”或“PATH”环境variables中添加了“C:/ Windows / System32”。 我可以使用reg /? 命令。 我也跑了'vcvarsall.bat'文件没有错误信息。

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

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

我希望这可以帮助别人。

在我的情况下,我会安装VS.Net 2015更新2,离开Windows 8.1 SDK框UNchecked(因为我现在使用Windows 10,并不认为这是必要的)。 但是,这似乎导致一些必需的registry设置被省略。

从控制面板上修改VS.Net 2015并检查8.1 SDK框中的问题。

另一个原因可能是VS 2013社区更新5安装了错误的快捷方式; 它为VS 2013安装VS 2012快捷键。

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

看到这个微软的社交职位 。

我在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