我电脑的配置:操作系统为32位Win7,VS版本为2012Ultimate,VS安装目录为“D:\Microsoft Visual Studio 11.0”
今天系统地研究了下“VS2012开发人员命令提示”,这个控制台用的就是Windows本身的控制台cmd.exe,只是在启动后执行了两个批处理脚本(扩展名BAT),在这两个脚本中从注册表里读取了若干个环境变量,打造了VS2012自己的开发人员命令提示。
这篇文章描述了批处理脚本“VsDevCmd.bat”和“VCVarsQueryRegistry.bat”为VS控制台添加的全部环境变量。本文描述的每个环境变量,都有以下两个属性:变量值是该环境变量在我的电脑中显示的值(这与我的计算机和VS安装路径有关),变量来源说明了该环境变量是怎么来的(即上面两个BAT文件是怎么获取的)。
1)%VS110ComnTools%
变量值:D:\Microsoft Visual Studio 11.0\Common7\Tools\
变量来源:下面四个注册表项中搜索键“11.0”,最先搜索到的非空字符串即为所求
HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7
HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
将找出的值,最后添加上 Common7\Tools\,便是环境变量%VS110COMNTOOLS%的值
如果找不到这个环境变量,运行VS控制台就会报错(error_no_VS110COMNTOOLSDIR),错误内容为:
ERROR: Cannot determine the location of the VS Common Tools folder.
2)%WindowsSdkDir%
变量值:C:\Program Files\Windows Kits\8.0\
变量来源:下面四个注册表项中搜索键“InstallationFolder”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0
HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0
HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.0
HKCU\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.0
3)%WindowsSdkDir_old%
变量值:C:\Program Files\Microsoft SDKs\Windows\v8.0A
变量来源:下面四个注册表项中搜索键“InstallationFolder”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0a
HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0a
HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.0a
HKCU\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.0a
4)%GetWindowsSdkDir_35%
变量值:C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\
变量来源:下面四个注册表项中搜索键“InstallationFolder”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx35Tools
HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx35Tools
HKLM\SOFTWARE\Wow6432Node\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx35Tools
HKCU\SOFTWARE\Wow6432Node\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx35Tools
5)%ExtensionSdkDir%
变量值:C:\Program Files\Microsoft SDKs\Windows\v8.0\ExtensionSDKs
变量来源:
若文件%ProgramFiles%\Microsoft SDKs\Windows\v8.0\ExtensionSDKs\Microsoft.VCLibs\11.0\SDKManifest.xml存在,则%ProgramFiles%\Microsoft SDKs\Windows\v8.0\ExtensionSDKs
若文件%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0\ExtensionSDKs\Microsoft.VCLibs\11.0\SDKManifest.xml存在,则%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0\ExtensionSDKs
二者都存在则取后者
6)%VSInstallDir%
变量值:D:\Microsoft Visual Studio 11.0\
变量来源:下面四个注册表项中搜索键“11.0”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7
HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
如果找不到这个环境变量,运行VS控制台就会报错(error_no_VSINSTALLDIR),错误内容为:
ERROR: Cannot determine the location of the VS installation.
7)%VCInstallDir%
变量值:D:\Microsoft Visual Studio 11.0\VC\
变量来源:下面四个注册表项中搜索键“11.0”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
8)%FSharpInstallDir%
变量值:C:\Program Files\Microsoft SDKs\F#\3.0\Framework\v4.0\
变量来源:下面四个注册表项中搜索键“ProductDir”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\Setup\F#
HKCU\SOFTWARE\Microsoft\VisualStudio\11.0\Setup\F#
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\Setup\F#
HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0\Setup\F#
9)%FrameworkDir32% (仅限32bit)
变量值:C:\Windows\Microsoft.NET\Framework\
变量来源:下面四个注册表项中搜索键“FrameworkDir32”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
如果找不到这个环境变量,运行VS控制台就会报错(error_no_FrameworkDIR32),错误内容为:
ERROR: Cannot determine the location of the .NET Framework 32bit installation.
10)%FrameworkVersion32% (仅限32bit)
变量值:v4.0.30319
变量来源:下面四个注册表项中搜索键“FrameworkVer32”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKLMreg query "%1\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
HKCUreg query "%1\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
如果找不到这个环境变量,运行VS控制台就会报错(error_no_FrameworkVer32),错误内容为:
ERROR: Cannot determine the version of the .NET Framework 32bit installation.
11)%FrameworkDir64% (仅限64bit)
变量值:(无)
变量来源:下面四个注册表项中搜索键“FrameworkDir64”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
12)FrameworkVer64 (仅限64bit)
变量值:(无)
变量来源:下面四个注册表项中搜索键“FrameworkVer64”,最先搜索到的非空字符串即为该环境变量的值
HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VC7
HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VC7
13)%Framework35Version%
直接指定为v3.5
如果找不到这个环境变量,运行VS控制台就会报错(error_no_Framework35Version),错误内容为:
ERROR: Cannot determine the .NET Framework 3.5 version.
14)%FrameworkDir%
同%FrameworkDir32%
15)%FrameworkVersion%
同%FrameworkVersion32%
16)%DevEnvDir%
变量值:D:\Microsoft Visual Studio 11.0\Common7\IDE\
变量来源:%VSINSTALLDIR%Common7\IDE\
17)%path%、%include%、%lib%、%libpath%
PATH环境变量:运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找
其余几个环境变量的意义,可以在下面两个MSDN页面中看到:
1. http://msdn.microsoft.com/zh-cn/library/kezkeayy%28v=vs.80%29.aspx
CL 工具使用下列环境变量:
CL(如果已定义)。在处理命令行之前,CL 工具处理在 CL 环境变量中定义的选项和参数。
INCLUDE,它必须指向 Visual C++ 安装的 \include 子目录
LIBPATH,它指定从中搜索使用 #using 引用的元数据文件的目录
2. http://msdn.microsoft.com/zh-cn/library/6y6t9esh.aspx
LINK 工具使用下列环境变量:
LINK(如果已定义)。 在处理命令行之前,LINK 工具处理在 LINK 环境变量中定义的选项和参数。
LIB(如果已定义)。 LINK 工具在搜索对象、库或在命令行上或由 /BASE 选项指定的其他文件时,使用 LIB 路径。 它还使用 LIB 路径查找在对象中指定的 .pdb 文件。 LIB 变量可包含一个或多个由分号分隔的指定路径。 一个路径必须指向 Visual C++ 安装的 \lib 子目录。
PATH,如果该工具需要运行 CVTRES 并且找不到与 LINK(链接)其自身相同的目录中的文件。(LINK 需要 CVTRES 链接一个 .res 文件。)PATH 必须指向 Visual C++ 安装的 \bin 子目录。
TMP,以在链接 OMF 或 .res 文件时指定一个目录。
---------------------------------------------------
批处理脚本“VsDevCmd.bat”和“VCVarsQueryRegistry.bat”添加的这四个环境变量列表:
(有些环境变量因计算机具体环境不同,可能不会被添加)
★PATH
%WindowsSdkDir_old%bin\NETFX 4.0 Tools;
%WindowsSdkDir_35%;
%WindowsSdkDir%bin\x86;
%VSINSTALLDIR%Team Tools\Performance Tools;
%ProgramFiles%\HTML Help Workshop;
%ProgramFiles(x86)%\HTML Help Workshop;
%VCINSTALLDIR%VCPackages;
%FrameworkDir%%Framework35Version%;
%FrameworkDir%%FrameworkVersion%
%VSINSTALLDIR%Common7\Tools;
%VCINSTALLDIR%BIN;
%DevEnvDir%;
%VSINSTALLDIR%VSTSDB\Deploy;
%FSHARPINSTALLDIR%;
%DevEnvDir%CommonExtensions\Microsoft\TestWindow;
★INCLUDE
%WindowsSdkDir%include\shared;
%WindowsSdkDir%include\um;
%WindowsSdkDir%include\winrt;
%VCINSTALLDIR%ATLMFC\INCLUDE;
%VCINSTALLDIR%INCLUDE;
★LIB
%WindowsSdkDir%lib\win8\um\x86;
%VCINSTALLDIR%ATLMFC\LIB;
%VCINSTALLDIR%LIB;
★LIBPATH
%WindowsSdkDir%References\CommonConfiguration\Neutral;
%ExtensionSDKDir%\Microsoft.VCLibs\11.0\References\CommonConfiguration\neutral;
%VCINSTALLDIR%ATLMFC\LIB;
%VCINSTALLDIR%LIB;
%FrameworkDir%%Framework35Version%;
%FrameworkDir%%FrameworkVersion%;
附:几个注册表用到的缩写
HKCR: HKEY_CLASSES_ROOT
HKCU: HKEY_CURRENT_USER
HKLM: HKEY_LOCAL_MACHINE
HKU: HKEY_USERS
HKCC: HKEY_CURRENT_CONFIG
END