System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact b2bd55c0a81de369ec3ee748e43ee471b6521116:


0000: 40 45 43 48 4f 20 4f 46 46 0d 0a 0d 0a 3a 3a 0d  @ECHO OFF....::.
0010: 0a 3a 3a 20 76 73 53 70 2e 62 61 74 20 2d 2d 0d  .:: vsSp.bat --.
0020: 0a 3a 3a 0d 0a 3a 3a 20 56 69 73 75 61 6c 20 53  .::..:: Visual S
0030: 74 75 64 69 6f 20 32 30 30 35 2f 32 30 30 38 2f  tudio 2005/2008/
0040: 32 30 31 30 2f 32 30 31 32 2f 32 30 31 33 2f 32  2010/2012/2013/2
0050: 30 31 35 20 53 65 72 76 69 63 65 20 50 61 63 6b  015 Service Pack
0060: 20 44 65 74 65 63 74 69 6f 6e 20 54 6f 6f 6c 0d   Detection Tool.
0070: 0a 3a 3a 0d 0a 3a 3a 20 57 72 69 74 74 65 6e 20  .::..:: Written 
0080: 62 79 20 4a 6f 65 20 4d 69 73 74 61 63 68 6b 69  by Joe Mistachki
0090: 6e 2e 0d 0a 3a 3a 20 52 65 6c 65 61 73 65 64 20  n...:: Released 
00a0: 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f  to the public do
00b0: 6d 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f 75  main, use at you
00c0: 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 3a 3a 0d  r own risk!..::.
00d0: 0a 0d 0a 53 45 54 4c 4f 43 41 4c 0d 0a 0d 0a 52  ...SETLOCAL....R
00e0: 45 4d 20 53 45 54 20 5f 5f 45 43 48 4f 3d 45 43  EM SET __ECHO=EC
00f0: 48 4f 0d 0a 49 46 20 4e 4f 54 20 44 45 46 49 4e  HO..IF NOT DEFIN
0100: 45 44 20 5f 41 45 43 48 4f 20 28 53 45 54 20 5f  ED _AECHO (SET _
0110: 41 45 43 48 4f 3d 52 45 4d 29 0d 0a 49 46 20 4e  AECHO=REM)..IF N
0120: 4f 54 20 44 45 46 49 4e 45 44 20 5f 43 45 43 48  OT DEFINED _CECH
0130: 4f 20 28 53 45 54 20 5f 43 45 43 48 4f 3d 52 45  O (SET _CECHO=RE
0140: 4d 29 0d 0a 49 46 20 4e 4f 54 20 44 45 46 49 4e  M)..IF NOT DEFIN
0150: 45 44 20 5f 56 45 43 48 4f 20 28 53 45 54 20 5f  ED _VECHO (SET _
0160: 56 45 43 48 4f 3d 52 45 4d 29 0d 0a 0d 0a 25 5f  VECHO=REM)....%_
0170: 41 45 43 48 4f 25 20 52 75 6e 6e 69 6e 67 20 25  AECHO% Running %
0180: 30 20 25 2a 0d 0a 0d 0a 53 45 54 20 44 55 4d 4d  0 %*....SET DUMM
0190: 59 32 3d 25 31 0d 0a 0d 0a 49 46 20 44 45 46 49  Y2=%1....IF DEFI
01a0: 4e 45 44 20 44 55 4d 4d 59 32 20 28 0d 0a 20 20  NED DUMMY2 (..  
01b0: 47 4f 54 4f 20 75 73 61 67 65 0d 0a 29 0d 0a 0d  GOTO usage..)...
01c0: 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45 3a 20  .REM..REM NOTE: 
01d0: 42 75 69 6c 64 20 74 68 65 20 63 6f 6d 6d 61 6e  Build the comman
01e0: 64 20 74 68 61 74 20 77 65 20 77 69 6c 6c 20 75  d that we will u
01f0: 73 65 20 74 6f 20 71 75 65 72 79 20 66 6f 72 20  se to query for 
0200: 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
0210: 30 35 2e 0d 0a 52 45 4d 20 20 20 20 20 20 20 56  05...REM       V
0220: 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
0230: 35 20 69 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79  5 is 32-bit only
0240: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 77 68 65  ; therefore, whe
0250: 6e 20 6e 6f 74 20 72 75 6e 6e 69 6e 67 20 6f 6e  n not running on
0260: 20 61 6e 0d 0a 52 45 4d 20 20 20 20 20 20 20 78   an..REM       x
0270: 38 36 20 70 6c 61 74 66 6f 72 6d 2c 20 6c 6f 6f  86 platform, loo
0280: 6b 20 69 6e 20 74 68 65 20 57 6f 57 36 34 20 72  k in the WoW64 r
0290: 65 67 69 73 74 72 79 20 68 69 76 65 2e 0d 0a 52  egistry hive...R
02a0: 45 4d 0d 0a 49 46 20 22 25 50 52 4f 43 45 53 53  EM..IF "%PROCESS
02b0: 4f 52 5f 41 52 43 48 49 54 45 43 54 55 52 45 25  OR_ARCHITECTURE%
02c0: 22 20 3d 3d 20 22 78 38 36 22 20 28 0d 0a 20 20  " == "x86" (..  
02d0: 53 45 54 20 47 45 54 5f 53 50 5f 43 4d 44 3d 72  SET GET_SP_CMD=r
02e0: 65 67 2e 65 78 65 20 51 55 45 52 59 20 22 48 4b  eg.exe QUERY "HK
02f0: 4c 4d 5c 53 4f 46 54 57 41 52 45 5c 4d 69 63 72  LM\SOFTWARE\Micr
0300: 6f 73 6f 66 74 5c 44 65 76 44 69 76 5c 56 53 5c  osoft\DevDiv\VS\
0310: 53 65 72 76 69 63 69 6e 67 5c 38 2e 30 22 20 2f  Servicing\8.0" /
0320: 76 20 53 50 0d 0a 29 20 45 4c 53 45 20 28 0d 0a  v SP..) ELSE (..
0330: 20 20 53 45 54 20 47 45 54 5f 53 50 5f 43 4d 44    SET GET_SP_CMD
0340: 3d 72 65 67 2e 65 78 65 20 51 55 45 52 59 20 22  =reg.exe QUERY "
0350: 48 4b 4c 4d 5c 53 4f 46 54 57 41 52 45 5c 57 6f  HKLM\SOFTWARE\Wo
0360: 77 36 34 33 32 4e 6f 64 65 5c 4d 69 63 72 6f 73  w6432Node\Micros
0370: 6f 66 74 5c 44 65 76 44 69 76 5c 56 53 5c 53 65  oft\DevDiv\VS\Se
0380: 72 76 69 63 69 6e 67 5c 38 2e 30 22 20 2f 76 20  rvicing\8.0" /v 
0390: 53 50 0d 0a 29 0d 0a 0d 0a 46 4f 52 20 2f 46 20  SP..)....FOR /F 
03a0: 22 65 6f 6c 3d 3b 20 74 6f 6b 65 6e 73 3d 31 2c  "eol=; tokens=1,
03b0: 32 2c 33 2a 22 20 25 25 49 20 49 4e 20 28 27 25  2,3*" %%I IN ('%
03c0: 47 45 54 5f 53 50 5f 43 4d 44 25 20 32 5e 3e 20  GET_SP_CMD% 2^> 
03d0: 4e 55 4c 27 29 20 44 4f 20 28 0d 0a 20 20 49 46  NUL') DO (..  IF
03e0: 20 7b 25 25 49 7d 20 3d 3d 20 7b 53 50 7d 20 28   {%%I} == {SP} (
03f0: 0d 0a 20 20 20 20 49 46 20 7b 25 25 4a 7d 20 3d  ..    IF {%%J} =
0400: 3d 20 7b 52 45 47 5f 44 57 4f 52 44 7d 20 28 0d  = {REG_DWORD} (.
0410: 0a 20 20 20 20 20 20 25 5f 41 45 43 48 4f 25 20  .      %_AECHO% 
0420: 46 6f 75 6e 64 20 56 69 73 75 61 6c 20 53 74 75  Found Visual Stu
0430: 64 69 6f 20 32 30 30 35 20 53 65 72 76 69 63 65  dio 2005 Service
0440: 20 50 61 63 6b 20 22 25 25 4b 22 2e 0d 0a 20 20   Pack "%%K"...  
0450: 20 20 20 20 53 45 54 20 56 53 32 30 30 35 53 50      SET VS2005SP
0460: 3d 25 25 4b 0d 0a 20 20 20 20 29 0d 0a 20 20 29  =%%K..    )..  )
0470: 0d 0a 29 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20  ..)....REM..REM 
0480: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the 
0490: 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 77 65 20  command that we 
04a0: 77 69 6c 6c 20 75 73 65 20 74 6f 20 71 75 65 72  will use to quer
04b0: 79 20 66 6f 72 20 56 69 73 75 61 6c 20 53 74 75  y for Visual Stu
04c0: 64 69 6f 20 32 30 30 38 2e 0d 0a 52 45 4d 20 20  dio 2008...REM  
04d0: 20 20 20 20 20 56 69 73 75 61 6c 20 53 74 75 64       Visual Stud
04e0: 69 6f 20 32 30 30 38 20 69 73 20 33 32 2d 62 69  io 2008 is 32-bi
04f0: 74 20 6f 6e 6c 79 3b 20 74 68 65 72 65 66 6f 72  t only; therefor
0500: 65 2c 20 77 68 65 6e 20 6e 6f 74 20 72 75 6e 6e  e, when not runn
0510: 69 6e 67 20 6f 6e 20 61 6e 0d 0a 52 45 4d 20 20  ing on an..REM  
0520: 20 20 20 20 20 78 38 36 20 70 6c 61 74 66 6f 72       x86 platfor
0530: 6d 2c 20 6c 6f 6f 6b 20 69 6e 20 74 68 65 20 57  m, look in the W
0540: 6f 57 36 34 20 72 65 67 69 73 74 72 79 20 68 69  oW64 registry hi
0550: 76 65 2e 0d 0a 52 45 4d 0d 0a 49 46 20 22 25 50  ve...REM..IF "%P
0560: 52 4f 43 45 53 53 4f 52 5f 41 52 43 48 49 54 45  ROCESSOR_ARCHITE
0570: 43 54 55 52 45 25 22 20 3d 3d 20 22 78 38 36 22  CTURE%" == "x86"
0580: 20 28 0d 0a 20 20 53 45 54 20 47 45 54 5f 53 50   (..  SET GET_SP
0590: 5f 43 4d 44 3d 72 65 67 2e 65 78 65 20 51 55 45  _CMD=reg.exe QUE
05a0: 52 59 20 22 48 4b 4c 4d 5c 53 4f 46 54 57 41 52  RY "HKLM\SOFTWAR
05b0: 45 5c 4d 69 63 72 6f 73 6f 66 74 5c 44 65 76 44  E\Microsoft\DevD
05c0: 69 76 5c 56 53 5c 53 65 72 76 69 63 69 6e 67 5c  iv\VS\Servicing\
05d0: 39 2e 30 22 20 2f 76 20 53 50 0d 0a 29 20 45 4c  9.0" /v SP..) EL
05e0: 53 45 20 28 0d 0a 20 20 53 45 54 20 47 45 54 5f  SE (..  SET GET_
05f0: 53 50 5f 43 4d 44 3d 72 65 67 2e 65 78 65 20 51  SP_CMD=reg.exe Q
0600: 55 45 52 59 20 22 48 4b 4c 4d 5c 53 4f 46 54 57  UERY "HKLM\SOFTW
0610: 41 52 45 5c 57 6f 77 36 34 33 32 4e 6f 64 65 5c  ARE\Wow6432Node\
0620: 4d 69 63 72 6f 73 6f 66 74 5c 44 65 76 44 69 76  Microsoft\DevDiv
0630: 5c 56 53 5c 53 65 72 76 69 63 69 6e 67 5c 39 2e  \VS\Servicing\9.
0640: 30 22 20 2f 76 20 53 50 0d 0a 29 0d 0a 0d 0a 46  0" /v SP..)....F
0650: 4f 52 20 2f 46 20 22 65 6f 6c 3d 3b 20 74 6f 6b  OR /F "eol=; tok
0660: 65 6e 73 3d 31 2c 32 2c 33 2a 22 20 25 25 49 20  ens=1,2,3*" %%I 
0670: 49 4e 20 28 27 25 47 45 54 5f 53 50 5f 43 4d 44  IN ('%GET_SP_CMD
0680: 25 20 32 5e 3e 20 4e 55 4c 27 29 20 44 4f 20 28  % 2^> NUL') DO (
0690: 0d 0a 20 20 49 46 20 7b 25 25 49 7d 20 3d 3d 20  ..  IF {%%I} == 
06a0: 7b 53 50 7d 20 28 0d 0a 20 20 20 20 49 46 20 7b  {SP} (..    IF {
06b0: 25 25 4a 7d 20 3d 3d 20 7b 52 45 47 5f 44 57 4f  %%J} == {REG_DWO
06c0: 52 44 7d 20 28 0d 0a 20 20 20 20 20 20 25 5f 41  RD} (..      %_A
06d0: 45 43 48 4f 25 20 46 6f 75 6e 64 20 56 69 73 75  ECHO% Found Visu
06e0: 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38 20 53  al Studio 2008 S
06f0: 65 72 76 69 63 65 20 50 61 63 6b 20 22 25 25 4b  ervice Pack "%%K
0700: 22 2e 0d 0a 20 20 20 20 20 20 53 45 54 20 56 53  "...      SET VS
0710: 32 30 30 38 53 50 3d 25 25 4b 0d 0a 20 20 20 20  2008SP=%%K..    
0720: 29 0d 0a 20 20 29 0d 0a 29 0d 0a 0d 0a 52 45 4d  )..  )..)....REM
0730: 0d 0a 52 45 4d 20 4e 4f 54 45 3a 20 42 75 69 6c  ..REM NOTE: Buil
0740: 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 68  d the command th
0750: 61 74 20 77 65 20 77 69 6c 6c 20 75 73 65 20 74  at we will use t
0760: 6f 20 71 75 65 72 79 20 66 6f 72 20 56 69 73 75  o query for Visu
0770: 61 6c 20 53 74 75 64 69 6f 20 32 30 31 30 2e 0d  al Studio 2010..
0780: 0a 52 45 4d 20 20 20 20 20 20 20 56 69 73 75 61  .REM       Visua
0790: 6c 20 53 74 75 64 69 6f 20 32 30 31 30 20 69 73  l Studio 2010 is
07a0: 20 33 32 2d 62 69 74 20 6f 6e 6c 79 3b 20 74 68   32-bit only; th
07b0: 65 72 65 66 6f 72 65 2c 20 77 68 65 6e 20 6e 6f  erefore, when no
07c0: 74 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 6e 0d  t running on an.
07d0: 0a 52 45 4d 20 20 20 20 20 20 20 78 38 36 20 70  .REM       x86 p
07e0: 6c 61 74 66 6f 72 6d 2c 20 6c 6f 6f 6b 20 69 6e  latform, look in
07f0: 20 74 68 65 20 57 6f 57 36 34 20 72 65 67 69 73   the WoW64 regis
0800: 74 72 79 20 68 69 76 65 2e 0d 0a 52 45 4d 0d 0a  try hive...REM..
0810: 49 46 20 22 25 50 52 4f 43 45 53 53 4f 52 5f 41  IF "%PROCESSOR_A
0820: 52 43 48 49 54 45 43 54 55 52 45 25 22 20 3d 3d  RCHITECTURE%" ==
0830: 20 22 78 38 36 22 20 28 0d 0a 20 20 53 45 54 20   "x86" (..  SET 
0840: 47 45 54 5f 53 50 5f 43 4d 44 3d 72 65 67 2e 65  GET_SP_CMD=reg.e
0850: 78 65 20 51 55 45 52 59 20 22 48 4b 4c 4d 5c 53  xe QUERY "HKLM\S
0860: 4f 46 54 57 41 52 45 5c 4d 69 63 72 6f 73 6f 66  OFTWARE\Microsof
0870: 74 5c 44 65 76 44 69 76 5c 56 53 5c 53 65 72 76  t\DevDiv\VS\Serv
0880: 69 63 69 6e 67 5c 31 30 2e 30 22 20 2f 76 20 53  icing\10.0" /v S
0890: 50 0d 0a 29 20 45 4c 53 45 20 28 0d 0a 20 20 53  P..) ELSE (..  S
08a0: 45 54 20 47 45 54 5f 53 50 5f 43 4d 44 3d 72 65  ET GET_SP_CMD=re
08b0: 67 2e 65 78 65 20 51 55 45 52 59 20 22 48 4b 4c  g.exe QUERY "HKL
08c0: 4d 5c 53 4f 46 54 57 41 52 45 5c 57 6f 77 36 34  M\SOFTWARE\Wow64
08d0: 33 32 4e 6f 64 65 5c 4d 69 63 72 6f 73 6f 66 74  32Node\Microsoft
08e0: 5c 44 65 76 44 69 76 5c 56 53 5c 53 65 72 76 69  \DevDiv\VS\Servi
08f0: 63 69 6e 67 5c 31 30 2e 30 22 20 2f 76 20 53 50  cing\10.0" /v SP
0900: 0d 0a 29 0d 0a 0d 0a 46 4f 52 20 2f 46 20 22 65  ..)....FOR /F "e
0910: 6f 6c 3d 3b 20 74 6f 6b 65 6e 73 3d 31 2c 32 2c  ol=; tokens=1,2,
0920: 33 2a 22 20 25 25 49 20 49 4e 20 28 27 25 47 45  3*" %%I IN ('%GE
0930: 54 5f 53 50 5f 43 4d 44 25 20 32 5e 3e 20 4e 55  T_SP_CMD% 2^> NU
0940: 4c 27 29 20 44 4f 20 28 0d 0a 20 20 49 46 20 7b  L') DO (..  IF {
0950: 25 25 49 7d 20 3d 3d 20 7b 53 50 7d 20 28 0d 0a  %%I} == {SP} (..
0960: 20 20 20 20 49 46 20 7b 25 25 4a 7d 20 3d 3d 20      IF {%%J} == 
0970: 7b 52 45 47 5f 44 57 4f 52 44 7d 20 28 0d 0a 20  {REG_DWORD} (.. 
0980: 20 20 20 20 20 25 5f 41 45 43 48 4f 25 20 46 6f       %_AECHO% Fo
0990: 75 6e 64 20 56 69 73 75 61 6c 20 53 74 75 64 69  und Visual Studi
09a0: 6f 20 32 30 31 30 20 53 65 72 76 69 63 65 20 50  o 2010 Service P
09b0: 61 63 6b 20 22 25 25 4b 22 2e 0d 0a 20 20 20 20  ack "%%K"...    
09c0: 20 20 53 45 54 20 56 53 32 30 31 30 53 50 3d 25    SET VS2010SP=%
09d0: 25 4b 0d 0a 20 20 20 20 29 0d 0a 20 20 29 0d 0a  %K..    )..  )..
09e0: 29 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f  )....REM..REM NO
09f0: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 63 6f  TE: Build the co
0a00: 6d 6d 61 6e 64 20 74 68 61 74 20 77 65 20 77 69  mmand that we wi
0a10: 6c 6c 20 75 73 65 20 74 6f 20 71 75 65 72 79 20  ll use to query 
0a20: 66 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69  for Visual Studi
0a30: 6f 20 32 30 31 32 2e 0d 0a 52 45 4d 20 20 20 20  o 2012...REM    
0a40: 20 20 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f     Visual Studio
0a50: 20 32 30 31 32 20 69 73 20 33 32 2d 62 69 74 20   2012 is 32-bit 
0a60: 6f 6e 6c 79 3b 20 74 68 65 72 65 66 6f 72 65 2c  only; therefore,
0a70: 20 77 68 65 6e 20 6e 6f 74 20 72 75 6e 6e 69 6e   when not runnin
0a80: 67 20 6f 6e 20 61 6e 0d 0a 52 45 4d 20 20 20 20  g on an..REM    
0a90: 20 20 20 78 38 36 20 70 6c 61 74 66 6f 72 6d 2c     x86 platform,
0aa0: 20 6c 6f 6f 6b 20 69 6e 20 74 68 65 20 57 6f 57   look in the WoW
0ab0: 36 34 20 72 65 67 69 73 74 72 79 20 68 69 76 65  64 registry hive
0ac0: 2e 0d 0a 52 45 4d 0d 0a 49 46 20 22 25 50 52 4f  ...REM..IF "%PRO
0ad0: 43 45 53 53 4f 52 5f 41 52 43 48 49 54 45 43 54  CESSOR_ARCHITECT
0ae0: 55 52 45 25 22 20 3d 3d 20 22 78 38 36 22 20 28  URE%" == "x86" (
0af0: 0d 0a 20 20 53 45 54 20 47 45 54 5f 53 50 5f 43  ..  SET GET_SP_C
0b00: 4d 44 3d 72 65 67 2e 65 78 65 20 51 55 45 52 59  MD=reg.exe QUERY
0b10: 20 22 48 4b 4c 4d 5c 53 4f 46 54 57 41 52 45 5c   "HKLM\SOFTWARE\
0b20: 4d 69 63 72 6f 73 6f 66 74 5c 44 65 76 44 69 76  Microsoft\DevDiv
0b30: 5c 56 53 5c 53 65 72 76 69 63 69 6e 67 5c 31 31  \VS\Servicing\11
0b40: 2e 30 22 20 2f 76 20 53 50 0d 0a 29 20 45 4c 53  .0" /v SP..) ELS
0b50: 45 20 28 0d 0a 20 20 53 45 54 20 47 45 54 5f 53  E (..  SET GET_S
0b60: 50 5f 43 4d 44 3d 72 65 67 2e 65 78 65 20 51 55  P_CMD=reg.exe QU
0b70: 45 52 59 20 22 48 4b 4c 4d 5c 53 4f 46 54 57 41  ERY "HKLM\SOFTWA
0b80: 52 45 5c 57 6f 77 36 34 33 32 4e 6f 64 65 5c 4d  RE\Wow6432Node\M
0b90: 69 63 72 6f 73 6f 66 74 5c 44 65 76 44 69 76 5c  icrosoft\DevDiv\
0ba0: 56 53 5c 53 65 72 76 69 63 69 6e 67 5c 31 31 2e  VS\Servicing\11.
0bb0: 30 22 20 2f 76 20 53 50 0d 0a 29 0d 0a 0d 0a 46  0" /v SP..)....F
0bc0: 4f 52 20 2f 46 20 22 65 6f 6c 3d 3b 20 74 6f 6b  OR /F "eol=; tok
0bd0: 65 6e 73 3d 31 2c 32 2c 33 2a 22 20 25 25 49 20  ens=1,2,3*" %%I 
0be0: 49 4e 20 28 27 25 47 45 54 5f 53 50 5f 43 4d 44  IN ('%GET_SP_CMD
0bf0: 25 20 32 5e 3e 20 4e 55 4c 27 29 20 44 4f 20 28  % 2^> NUL') DO (
0c00: 0d 0a 20 20 49 46 20 7b 25 25 49 7d 20 3d 3d 20  ..  IF {%%I} == 
0c10: 7b 53 50 7d 20 28 0d 0a 20 20 20 20 49 46 20 7b  {SP} (..    IF {
0c20: 25 25 4a 7d 20 3d 3d 20 7b 52 45 47 5f 44 57 4f  %%J} == {REG_DWO
0c30: 52 44 7d 20 28 0d 0a 20 20 20 20 20 20 25 5f 41  RD} (..      %_A
0c40: 45 43 48 4f 25 20 46 6f 75 6e 64 20 56 69 73 75  ECHO% Found Visu
0c50: 61 6c 20 53 74 75 64 69 6f 20 32 30 31 32 20 53  al Studio 2012 S
0c60: 65 72 76 69 63 65 20 50 61 63 6b 20 22 25 25 4b  ervice Pack "%%K
0c70: 22 2e 0d 0a 20 20 20 20 20 20 53 45 54 20 56 53  "...      SET VS
0c80: 32 30 31 32 53 50 3d 25 25 4b 0d 0a 20 20 20 20  2012SP=%%K..    
0c90: 29 0d 0a 20 20 29 0d 0a 29 0d 0a 0d 0a 52 45 4d  )..  )..)....REM
0ca0: 0d 0a 52 45 4d 20 4e 4f 54 45 3a 20 42 75 69 6c  ..REM NOTE: Buil
0cb0: 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 68  d the command th
0cc0: 61 74 20 77 65 20 77 69 6c 6c 20 75 73 65 20 74  at we will use t
0cd0: 6f 20 71 75 65 72 79 20 66 6f 72 20 56 69 73 75  o query for Visu
0ce0: 61 6c 20 53 74 75 64 69 6f 20 32 30 31 33 2e 0d  al Studio 2013..
0cf0: 0a 52 45 4d 20 20 20 20 20 20 20 56 69 73 75 61  .REM       Visua
0d00: 6c 20 53 74 75 64 69 6f 20 32 30 31 33 20 69 73  l Studio 2013 is
0d10: 20 33 32 2d 62 69 74 20 6f 6e 6c 79 3b 20 74 68   32-bit only; th
0d20: 65 72 65 66 6f 72 65 2c 20 77 68 65 6e 20 6e 6f  erefore, when no
0d30: 74 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 6e 0d  t running on an.
0d40: 0a 52 45 4d 20 20 20 20 20 20 20 78 38 36 20 70  .REM       x86 p
0d50: 6c 61 74 66 6f 72 6d 2c 20 6c 6f 6f 6b 20 69 6e  latform, look in
0d60: 20 74 68 65 20 57 6f 57 36 34 20 72 65 67 69 73   the WoW64 regis
0d70: 74 72 79 20 68 69 76 65 2e 0d 0a 52 45 4d 0d 0a  try hive...REM..
0d80: 49 46 20 22 25 50 52 4f 43 45 53 53 4f 52 5f 41  IF "%PROCESSOR_A
0d90: 52 43 48 49 54 45 43 54 55 52 45 25 22 20 3d 3d  RCHITECTURE%" ==
0da0: 20 22 78 38 36 22 20 28 0d 0a 20 20 53 45 54 20   "x86" (..  SET 
0db0: 47 45 54 5f 53 50 5f 43 4d 44 3d 72 65 67 2e 65  GET_SP_CMD=reg.e
0dc0: 78 65 20 51 55 45 52 59 20 22 48 4b 4c 4d 5c 53  xe QUERY "HKLM\S
0dd0: 4f 46 54 57 41 52 45 5c 4d 69 63 72 6f 73 6f 66  OFTWARE\Microsof
0de0: 74 5c 44 65 76 44 69 76 5c 56 53 5c 53 65 72 76  t\DevDiv\VS\Serv
0df0: 69 63 69 6e 67 5c 31 32 2e 30 22 20 2f 76 20 53  icing\12.0" /v S
0e00: 50 0d 0a 29 20 45 4c 53 45 20 28 0d 0a 20 20 53  P..) ELSE (..  S
0e10: 45 54 20 47 45 54 5f 53 50 5f 43 4d 44 3d 72 65  ET GET_SP_CMD=re
0e20: 67 2e 65 78 65 20 51 55 45 52 59 20 22 48 4b 4c  g.exe QUERY "HKL
0e30: 4d 5c 53 4f 46 54 57 41 52 45 5c 57 6f 77 36 34  M\SOFTWARE\Wow64
0e40: 33 32 4e 6f 64 65 5c 4d 69 63 72 6f 73 6f 66 74  32Node\Microsoft
0e50: 5c 44 65 76 44 69 76 5c 56 53 5c 53 65 72 76 69  \DevDiv\VS\Servi
0e60: 63 69 6e 67 5c 31 32 2e 30 22 20 2f 76 20 53 50  cing\12.0" /v SP
0e70: 0d 0a 29 0d 0a 0d 0a 46 4f 52 20 2f 46 20 22 65  ..)....FOR /F "e
0e80: 6f 6c 3d 3b 20 74 6f 6b 65 6e 73 3d 31 2c 32 2c  ol=; tokens=1,2,
0e90: 33 2a 22 20 25 25 49 20 49 4e 20 28 27 25 47 45  3*" %%I IN ('%GE
0ea0: 54 5f 53 50 5f 43 4d 44 25 20 32 5e 3e 20 4e 55  T_SP_CMD% 2^> NU
0eb0: 4c 27 29 20 44 4f 20 28 0d 0a 20 20 49 46 20 7b  L') DO (..  IF {
0ec0: 25 25 49 7d 20 3d 3d 20 7b 53 50 7d 20 28 0d 0a  %%I} == {SP} (..
0ed0: 20 20 20 20 49 46 20 7b 25 25 4a 7d 20 3d 3d 20      IF {%%J} == 
0ee0: 7b 52 45 47 5f 44 57 4f 52 44 7d 20 28 0d 0a 20  {REG_DWORD} (.. 
0ef0: 20 20 20 20 20 25 5f 41 45 43 48 4f 25 20 46 6f       %_AECHO% Fo
0f00: 75 6e 64 20 56 69 73 75 61 6c 20 53 74 75 64 69  und Visual Studi
0f10: 6f 20 32 30 31 33 20 53 65 72 76 69 63 65 20 50  o 2013 Service P
0f20: 61 63 6b 20 22 25 25 4b 22 2e 0d 0a 20 20 20 20  ack "%%K"...    
0f30: 20 20 53 45 54 20 56 53 32 30 31 33 53 50 3d 25    SET VS2013SP=%
0f40: 25 4b 0d 0a 20 20 20 20 29 0d 0a 20 20 29 0d 0a  %K..    )..  )..
0f50: 29 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f  )....REM..REM NO
0f60: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 63 6f  TE: Build the co
0f70: 6d 6d 61 6e 64 20 74 68 61 74 20 77 65 20 77 69  mmand that we wi
0f80: 6c 6c 20 75 73 65 20 74 6f 20 71 75 65 72 79 20  ll use to query 
0f90: 66 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69  for Visual Studi
0fa0: 6f 20 32 30 31 35 2e 0d 0a 52 45 4d 20 20 20 20  o 2015...REM    
0fb0: 20 20 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f     Visual Studio
0fc0: 20 32 30 31 35 20 69 73 20 33 32 2d 62 69 74 20   2015 is 32-bit 
0fd0: 6f 6e 6c 79 3b 20 74 68 65 72 65 66 6f 72 65 2c  only; therefore,
0fe0: 20 77 68 65 6e 20 6e 6f 74 20 72 75 6e 6e 69 6e   when not runnin
0ff0: 67 20 6f 6e 20 61 6e 0d 0a 52 45 4d 20 20 20 20  g on an..REM    
1000: 20 20 20 78 38 36 20 70 6c 61 74 66 6f 72 6d 2c     x86 platform,
1010: 20 6c 6f 6f 6b 20 69 6e 20 74 68 65 20 57 6f 57   look in the WoW
1020: 36 34 20 72 65 67 69 73 74 72 79 20 68 69 76 65  64 registry hive
1030: 2e 0d 0a 52 45 4d 0d 0a 49 46 20 22 25 50 52 4f  ...REM..IF "%PRO
1040: 43 45 53 53 4f 52 5f 41 52 43 48 49 54 45 43 54  CESSOR_ARCHITECT
1050: 55 52 45 25 22 20 3d 3d 20 22 78 38 36 22 20 28  URE%" == "x86" (
1060: 0d 0a 20 20 53 45 54 20 47 45 54 5f 53 50 5f 43  ..  SET GET_SP_C
1070: 4d 44 3d 72 65 67 2e 65 78 65 20 51 55 45 52 59  MD=reg.exe QUERY
1080: 20 22 48 4b 4c 4d 5c 53 4f 46 54 57 41 52 45 5c   "HKLM\SOFTWARE\
1090: 4d 69 63 72 6f 73 6f 66 74 5c 44 65 76 44 69 76  Microsoft\DevDiv
10a0: 5c 56 53 5c 53 65 72 76 69 63 69 6e 67 5c 31 34  \VS\Servicing\14
10b0: 2e 30 22 20 2f 76 20 53 50 0d 0a 29 20 45 4c 53  .0" /v SP..) ELS
10c0: 45 20 28 0d 0a 20 20 53 45 54 20 47 45 54 5f 53  E (..  SET GET_S
10d0: 50 5f 43 4d 44 3d 72 65 67 2e 65 78 65 20 51 55  P_CMD=reg.exe QU
10e0: 45 52 59 20 22 48 4b 4c 4d 5c 53 4f 46 54 57 41  ERY "HKLM\SOFTWA
10f0: 52 45 5c 57 6f 77 36 34 33 32 4e 6f 64 65 5c 4d  RE\Wow6432Node\M
1100: 69 63 72 6f 73 6f 66 74 5c 44 65 76 44 69 76 5c  icrosoft\DevDiv\
1110: 56 53 5c 53 65 72 76 69 63 69 6e 67 5c 31 34 2e  VS\Servicing\14.
1120: 30 22 20 2f 76 20 53 50 0d 0a 29 0d 0a 0d 0a 46  0" /v SP..)....F
1130: 4f 52 20 2f 46 20 22 65 6f 6c 3d 3b 20 74 6f 6b  OR /F "eol=; tok
1140: 65 6e 73 3d 31 2c 32 2c 33 2a 22 20 25 25 49 20  ens=1,2,3*" %%I 
1150: 49 4e 20 28 27 25 47 45 54 5f 53 50 5f 43 4d 44  IN ('%GET_SP_CMD
1160: 25 20 32 5e 3e 20 4e 55 4c 27 29 20 44 4f 20 28  % 2^> NUL') DO (
1170: 0d 0a 20 20 49 46 20 7b 25 25 49 7d 20 3d 3d 20  ..  IF {%%I} == 
1180: 7b 53 50 7d 20 28 0d 0a 20 20 20 20 49 46 20 7b  {SP} (..    IF {
1190: 25 25 4a 7d 20 3d 3d 20 7b 52 45 47 5f 44 57 4f  %%J} == {REG_DWO
11a0: 52 44 7d 20 28 0d 0a 20 20 20 20 20 20 25 5f 41  RD} (..      %_A
11b0: 45 43 48 4f 25 20 46 6f 75 6e 64 20 56 69 73 75  ECHO% Found Visu
11c0: 61 6c 20 53 74 75 64 69 6f 20 32 30 31 35 20 53  al Studio 2015 S
11d0: 65 72 76 69 63 65 20 50 61 63 6b 20 22 25 25 4b  ervice Pack "%%K
11e0: 22 2e 0d 0a 20 20 20 20 20 20 53 45 54 20 56 53  "...      SET VS
11f0: 32 30 31 35 53 50 3d 25 25 4b 0d 0a 20 20 20 20  2015SP=%%K..    
1200: 29 0d 0a 20 20 29 0d 0a 29 0d 0a 0d 0a 47 4f 54  )..  )..)....GOT
1210: 4f 20 6e 6f 5f 65 72 72 6f 72 73 0d 0a 0d 0a 3a  O no_errors....:
1220: 66 6e 5f 52 65 73 65 74 45 72 72 6f 72 4c 65 76  fn_ResetErrorLev
1230: 65 6c 0d 0a 20 20 56 45 52 49 46 59 20 3e 20 4e  el..  VERIFY > N
1240: 55 4c 0d 0a 20 20 47 4f 54 4f 20 3a 45 4f 46 0d  UL..  GOTO :EOF.
1250: 0a 0d 0a 3a 66 6e 5f 53 65 74 45 72 72 6f 72 4c  ...:fn_SetErrorL
1260: 65 76 65 6c 0d 0a 20 20 56 45 52 49 46 59 20 4d  evel..  VERIFY M
1270: 41 59 42 45 20 32 3e 20 4e 55 4c 0d 0a 20 20 47  AYBE 2> NUL..  G
1280: 4f 54 4f 20 3a 45 4f 46 0d 0a 0d 0a 3a 75 73 61  OTO :EOF....:usa
1290: 67 65 0d 0a 20 20 45 43 48 4f 2e 0d 0a 20 20 45  ge..  ECHO...  E
12a0: 43 48 4f 20 55 73 61 67 65 3a 20 25 7e 6e 78 30  CHO Usage: %~nx0
12b0: 0d 0a 20 20 45 43 48 4f 2e 0d 0a 20 20 47 4f 54  ..  ECHO...  GOT
12c0: 4f 20 65 72 72 6f 72 73 0d 0a 0d 0a 3a 65 72 72  O errors....:err
12d0: 6f 72 73 0d 0a 20 20 43 41 4c 4c 20 3a 66 6e 5f  ors..  CALL :fn_
12e0: 53 65 74 45 72 72 6f 72 4c 65 76 65 6c 0d 0a 20  SetErrorLevel.. 
12f0: 20 45 4e 44 4c 4f 43 41 4c 0d 0a 20 20 47 4f 54   ENDLOCAL..  GOT
1300: 4f 20 65 6e 64 5f 6f 66 5f 66 69 6c 65 0d 0a 0d  O end_of_file...
1310: 0a 3a 6e 6f 5f 65 72 72 6f 72 73 0d 0a 20 20 45  .:no_errors..  E
1320: 4e 44 4c 4f 43 41 4c 20 26 26 20 28 0d 0a 20 20  NDLOCAL && (..  
1330: 20 20 53 45 54 20 56 53 32 30 30 35 53 50 3d 25    SET VS2005SP=%
1340: 56 53 32 30 30 35 53 50 25 0d 0a 20 20 20 20 53  VS2005SP%..    S
1350: 45 54 20 56 53 32 30 30 38 53 50 3d 25 56 53 32  ET VS2008SP=%VS2
1360: 30 30 38 53 50 25 0d 0a 20 20 20 20 53 45 54 20  008SP%..    SET 
1370: 56 53 32 30 31 30 53 50 3d 25 56 53 32 30 31 30  VS2010SP=%VS2010
1380: 53 50 25 0d 0a 20 20 20 20 53 45 54 20 56 53 32  SP%..    SET VS2
1390: 30 31 32 53 50 3d 25 56 53 32 30 31 32 53 50 25  012SP=%VS2012SP%
13a0: 0d 0a 20 20 20 20 53 45 54 20 56 53 32 30 31 33  ..    SET VS2013
13b0: 53 50 3d 25 56 53 32 30 31 33 53 50 25 0d 0a 20  SP=%VS2013SP%.. 
13c0: 20 20 20 53 45 54 20 56 53 32 30 31 35 53 50 3d     SET VS2015SP=
13d0: 25 56 53 32 30 31 35 53 50 25 0d 0a 20 20 29 0d  %VS2015SP%..  ).
13e0: 0a 20 20 43 41 4c 4c 20 3a 66 6e 5f 52 65 73 65  .  CALL :fn_Rese
13f0: 74 45 72 72 6f 72 4c 65 76 65 6c 0d 0a 20 20 47  tErrorLevel..  G
1400: 4f 54 4f 20 65 6e 64 5f 6f 66 5f 66 69 6c 65 0d  OTO end_of_file.
1410: 0a 0d 0a 3a 65 6e 64 5f 6f 66 5f 66 69 6c 65 0d  ...:end_of_file.
1420: 0a 45 58 49 54 20 2f 42 20 25 45 52 52 4f 52 4c  .EXIT /B %ERRORL
1430: 45 56 45 4c 25 0d 0a                             EVEL%..