“Visual Studio 2005 命令提示”工具原理解析

观察“Visual Studio 2005 命令提示”的属性,发现运行“Visual Studio 2005 命令提示”即运行

%comspec% /k ""d:\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86

其中comspec即%SystemRoot%\system32\cmd.exe,故以上命令行即“以x86为参数,运行vcvarsall.bat批处理文件”

查看vcvarsall.bat文件的源代码

@echooff
if
" %1 " == "" gotox86
ifnot
" %2 " == "" gotousage

if/i%
1 == x86gotox86
if/i%
1 == amd64gotoamd64
if/i%
1 == x64gotoamd64
if/i%
1 == ia64gotoia64
if/i%
1 == x86_amd64gotox86_amd64
if/i%
1 == x86_ia64gotox86_ia64
gotousage

:x86
ifnotexist
" %~dp0binvcvars32.bat " gotomissing
call
" %~dp0binvcvars32.bat "
goto:eof

:amd64
ifnotexist
" %~dp0binamd64vcvarsamd64.bat " gotomissing
call
" %~dp0binamd64vcvarsamd64.bat "
goto:eof

:ia64
ifnotexist
" %~dp0binia64vcvarsia64.bat " gotomissing
call
" %~dp0binia64vcvarsia64.bat "
goto:eof

:x86_amd64
ifnotexist
" %~dp0bin_amd64vcvarsx86_amd64.bat " gotomissing
call
" %~dp0bin_amd64vcvarsx86_amd64.bat "
goto:eof

:x86_ia64
ifnotexist
" %~dp0bin_ia64vcvarsx86_ia64.bat " gotomissing
call
" %~dp0bin_ia64vcvarsx86_ia64.bat "
goto:eof

:usage
echoErrorinscriptusage.Thecorrectusageis:
echo%
0 [ option ]
echowhere
[ option ] is:x86^|ia64^|amd64^|x86_amd64^|x86_ia64
echo:
echoForexample:
echo%
0 x86_ia64
goto:eof

:missing
echoThespecifiedconfigurationtypeismissing.Thetoolsforthe
echoconfigurationmightnotbeinstalled.
goto:eof

不难发现,实际运行的代码是

:x86
if not exist "%~dp0bin\vcvars32.bat" goto missing
call "%~dp0bin\vcvars32.bat"
goto :eof

即运行当前目录下的bin目录下的vcvars32.bat文件,这个文件的内容非常简单,如下:

"%VS80COMNTOOLS%vsvars32.bat"

其中VS80COMNTOOLS为系统变量,在我的机器上取值d:\Microsoft Visual Studio 8\Common7\Tools\

故找到该目录,并查看其下的vsvars32.bat,代码如下

@SETVSINSTALLDIR = d:MicrosoftVisualStudio 8
@SETVCINSTALLDIR
= d:MicrosoftVisualStudio 8 VC
@SETFrameworkDir
= C:WINDOWSMicrosoft.NETFramework
@SETFrameworkVersion
= v2 .0.50727
@SETFrameworkSDKDir
= d:MicrosoftVisualStudio 8 SDKv2 .0
@if
" %VSINSTALLDIR% " == "" gotoerror_no_VSINSTALLDIR
@if
" %VCINSTALLDIR% " == "" gotoerror_no_VCINSTALLDIR

@echoSettingenvironmentforusingMicrosoftVisualStudio
2005 x86tools.

@rem
@remRootofVisualStudioIDEinstalledfiles.
@rem
@setDevEnvDir
= d:MicrosoftVisualStudio 8 Common7IDE

@setPATH
= d:MicrosoftVisualStudio 8 Common7IDE ; d:MicrosoftVisualStudio8VCBIN;d:MicrosoftVisualStudio8Common7Tools;d:MicrosoftVisualStudio8Common7Toolsin;d:MicrosoftVisualStudio8VCPlatformSDKin;d:MicrosoftVisualStudio8SDKv2.0in;C:WINDOWSMicrosoft.NETFrameworkv2.0.50727;d:MicrosoftVisualStudio8VCVCPackages;%PATH%
@setINCLUDE = d:MicrosoftVisualStudio 8 VCATLMFCINCLUDE ; d:MicrosoftVisualStudio8VCINCLUDE;d:MicrosoftVisualStudio8VCPlatformSDKinclude;d:MicrosoftVisualStudio8SDKv2.0include;%INCLUDE%
@setLIB = d:MicrosoftVisualStudio 8 VCATLMFCLIB ; d:MicrosoftVisualStudio8VCLIB;d:MicrosoftVisualStudio8VCPlatformSDKlib;d:MicrosoftVisualStudio8SDKv2.0lib;%LIB%
@setLIBPATH = C:WINDOWSMicrosoft.NETFrameworkv2 .0.50727 ; d:MicrosoftVisualStudio8VCATLMFCLIB

@gotoend

:error_no_VSINSTALLDIR
@echoERROR:VSINSTALLDIRvariableisnotset.
@gotoend

:error_no_VCINSTALLDIR
@echoERROR:VCINSTALLDIRvariableisnotset.
@gotoend

:end

不能发现此文件的作用即为完成与VS2005相关的一些系统变量的设置,如:

VSINSTALLDIR——VS2005的安装路径;

VCINSTALLDIR——VC的安装路径;

FrameworkDir——Framework2.0的安装路径;

等等。

这样,如果我们需要自己写一个批处理文件,完成一些VS2005相关的设置,调用VS2005提供的一些工具(如gacutil,该工具在 D:\Microsoft Visual Studio 8\SDK\v2.0\Bin目录下,该目录没有被Path系统变量引用,故该命令无法直接在cmd中运行),就可以在批处理文件的开头先调用 vsvars32.bat,然后在调用VS2005的相关工具。代码举例如下:

call "%VS80COMNTOOLS%vsvars32.bat"
gacutil /i YejunWorkshop.IDUControlLibrary.Design.dll

该批处理文件直接运行即可将YejunWorkshop.IDUControlLibrary.Design.dll程序集添加到GAC中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值