我电脑的配置:操作系统为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.0Common7Tools
变量来源:下面四个注册表项中搜索键“11.0”,最先搜索到的非空字符串即为所求
HKLMSOFTWAREMicrosoftVisualStudioSxSVS7
HKCUSOFTWAREMicrosoftVisualStudioSxSVS7
HKLMSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVS7
HKCUSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVS7
将找出的值,最后添加上 Common7Tools,便是环境变量%VS110COMNTOOLS%的值
如果找不到这个环境变量,运行VS控制台就会报错(error_no_VS110COMNTOOLSDIR),错误内容为:
ERROR: Cannot determine the location of the VS Common Tools folder.
2)%WindowsSdkDir%
变量值:C:Program FilesWindows Kits8.0
变量来源:下面四个注册表项中搜索键“InstallationFolder”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftMicrosoft SDKsWindowsv8.0
HKCUSOFTWAREMicrosoftMicrosoft SDKsWindowsv8.0
HKLMSOFTWAREWow6432NodeMicrosoftMicrosoft SDKsWindowsv8.0
HKCUSOFTWAREWow6432NodeMicrosoftMicrosoft SDKsWindowsv8.0
3)%WindowsSdkDir_old%
变量值:C:Program FilesMicrosoft SDKsWindowsv8.0A
变量来源:下面四个注册表项中搜索键“InstallationFolder”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftMicrosoft SDKsWindowsv8.0a
HKCUSOFTWAREMicrosoftMicrosoft SDKsWindowsv8.0a
HKLMSOFTWAREWow6432NodeMicrosoftMicrosoft SDKsWindowsv8.0a
HKCUSOFTWAREWow6432NodeMicrosoftMicrosoft SDKsWindowsv8.0a
4)%GetWindowsSdkDir_35%
变量值:C:Program FilesMicrosoft SDKsWindowsv7.0Abin
变量来源:下面四个注册表项中搜索键“InstallationFolder”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftMicrosoft SDKsWindowsv8.0AWinSDK-NetFx35Tools
HKCUSOFTWAREMicrosoftMicrosoft SDKsWindowsv8.0AWinSDK-NetFx35Tools
HKLMSOFTWAREWow6432NodeMicrosoft SDKsWindowsv8.0AWinSDK-NetFx35Tools
HKCUSOFTWAREWow6432NodeMicrosoft SDKsWindowsv8.0AWinSDK-NetFx35Tools
5)%ExtensionSdkDir%
变量值:C:Program FilesMicrosoft SDKsWindowsv8.0ExtensionSDKs
变量来源:
若文件%ProgramFiles%Microsoft SDKsWindowsv8.0ExtensionSDKsMicrosoft.VCLibs11.0SDKManifest.xml存在,则%ProgramFiles%Microsoft SDKsWindowsv8.0ExtensionSDKs
若文件%ProgramFiles(x86)%Microsoft SDKsWindowsv8.0ExtensionSDKsMicrosoft.VCLibs11.0SDKManifest.xml存在,则%ProgramFiles(x86)%Microsoft SDKsWindowsv8.0ExtensionSDKs
二者都存在则取后者
6)%VSInstallDir%
变量值:D:Microsoft Visual Studio 11.0
变量来源:下面四个注册表项中搜索键“11.0”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftVisualStudioSxSVS7
HKCUSOFTWAREMicrosoftVisualStudioSxSVS7
HKLMSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVS7
HKCUSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVS7
如果找不到这个环境变量,运行VS控制台就会报错(error_no_VSINSTALLDIR),错误内容为:
ERROR: Cannot determine the location of the VS installation.
7)%VCInstallDir%
变量值:D:Microsoft Visual Studio 11.0VC
变量来源:下面四个注册表项中搜索键“11.0”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREMicrosoftVisualStudioSxSVC7
HKLMSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
8)%FSharpInstallDir%
变量值:C:Program FilesMicrosoft SDKsF#3.0Frameworkv4.0
变量来源:下面四个注册表项中搜索键“ProductDir”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftVisualStudio11.0SetupF#
HKCUSOFTWAREMicrosoftVisualStudio11.0SetupF#
HKLMSOFTWAREWow6432NodeMicrosoftVisualStudio11.0SetupF#
HKCUSOFTWAREWow6432NodeMicrosoftVisualStudio11.0SetupF#
9)%FrameworkDir32% (仅限32bit)
变量值:C:WindowsMicrosoft.NETFramework
变量来源:下面四个注册表项中搜索键“FrameworkDir32”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREMicrosoftVisualStudioSxSVC7
HKLMSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
如果找不到这个环境变量,运行VS控制台就会报错(error_no_FrameworkDIR32),错误内容为:
ERROR: Cannot determine the location of the .NET Framework 32bit installation.
10)%FrameworkVersion32% (仅限32bit)
变量值:v4.0.30319
变量来源:下面四个注册表项中搜索键“FrameworkVer32”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREMicrosoftVisualStudioSxSVC7
HKLMreg query "%1SOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
HKCUreg query "%1SOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
如果找不到这个环境变量,运行VS控制台就会报错(error_no_FrameworkVer32),错误内容为:
ERROR: Cannot determine the version of the .NET Framework 32bit installation.
11)%FrameworkDir64% (仅限64bit)
变量值:(无)
变量来源:下面四个注册表项中搜索键“FrameworkDir64”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREMicrosoftVisualStudioSxSVC7
HKLMSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
12)FrameworkVer64 (仅限64bit)
变量值:(无)
变量来源:下面四个注册表项中搜索键“FrameworkVer64”,最先搜索到的非空字符串即为该环境变量的值
HKLMSOFTWAREMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREMicrosoftVisualStudioSxSVC7
HKLMSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
HKCUSOFTWAREWow6432NodeMicrosoftVisualStudioSxSVC7
13)%Framework35Version%
直接指定为v3.5
如果找不到这个环境变量,运行VS控制台就会报错(error_no_Framework35Version),错误内容为:
ERROR: Cannot determine the .NET Framework 3.5 version.
14)%FrameworkDir%
同%FrameworkDir32%
15)%FrameworkVersion%
同%FrameworkVersion32%
16)�vEnvDir%
变量值:D:Microsoft Visual Studio 11.0Common7IDE
变量来源:%VSINSTALLDIR%Common7IDE
17)%path%、%include%、%lib%、%libpath%
PATH环境变量:运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找
其余几个环境变量的意义,可以在下面两个MSDN页面中看到:
1. http://msdn.microsoft.com/zh-cn/library/kezkeayy(v=vs.80).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%binNETFX 4.0 Tools;
%WindowsSdkDir_35%;
%WindowsSdkDir%binx86;
%VSINSTALLDIR%Team ToolsPerformance Tools;
%ProgramFiles%HTML Help Workshop;
%ProgramFiles(x86)%HTML Help Workshop;
%VCINSTALLDIR%VCPackages;
%FrameworkDir%%Framework35Version%;
%FrameworkDir%%FrameworkVersion%
%VSINSTALLDIR%Common7Tools;
%VCINSTALLDIR%BIN;
�vEnvDir%;
%VSINSTALLDIR%VSTSDBDeploy;
%FSHARPINSTALLDIR%;
�vEnvDir%CommonExtensionsMicrosoftTestWindow;
★INCLUDE
%WindowsSdkDir%includeshared;
%WindowsSdkDir%includeum;
%WindowsSdkDir%includewinrt;
%VCINSTALLDIR%ATLMFCINCLUDE;
%VCINSTALLDIR%INCLUDE;
★LIB
%WindowsSdkDir%libwin8umx86;
%VCINSTALLDIR%ATLMFCLIB;
%VCINSTALLDIR%LIB;
★LIBPATH
%WindowsSdkDir%ReferencesCommonConfigurationNeutral;
%ExtensionSDKDir%Microsoft.VCLibs11.0ReferencesCommonConfigurationneutral;
%VCINSTALLDIR%ATLMFCLIB;
%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