Jump to content

SOLVED: Drive letters changing between reboots


Recommended Posts

After some digging and additional batch scripting, I have developed a working solution for the CD/DVD drive letter changing when the computer reboots from GUI mode setup to first login. The link below has the original thread http://www.msfn.org/board/index.php?showtopic=74179 Two additional script files are included and they are copied over to the HD from the DVD during text mode setup using the $OEM$ directory structure. The sequence of execution is as follows:

  1. cmdlines.txt
  2. WINSETUP.CMD
  3. SYSTEM-ANALYZE.CMD
  4. SYSTEM-CONFIGURE.CMD
  5. SYSTEM-INSTALL.CMD

--OR--

If the CD/DVD drive is D:, then the following sequence is executed:

  1. cmdlines.txt
  2. WINSETUP.CMD
  3. SYSTEM-ANALYZE.CMD
  4. SYSTEM-INSTALL.CMD

WINSETUP.CMD

This is called from cmdlines.txt and runs at T-12 during the GUI mode setup phase. This determines what the current CD/DVD drive letter is, checks for the test environment, and then calls %SYSTEMDRIVE%\tmp\SYSTEM-ANALYZE.CMD

@ECHO OFF

REM Check the command line argument. If nothing is given, then we are going to do a
REM live install from the DVD-ROM. If TST is given, then we are in the test
REM environment on the harddisk and the base path is different.

IF /I "%1"=="" GOTO :START
IF /I "%1"=="TST" GOTO :TEST
GOTO :ERROR

REM This is the DVD-ROM Installation
:START
REM Hide the command window
CMDOW @ /HID

REM Find our CD-ROM Drive and set the evnironment variable
SET CHECKFILE=win51ip.SP2
IF EXIST C:\%CHECKFILE% SET CDROM=C:
IF EXIST D:\%CHECKFILE% SET CDROM=D:
IF EXIST E:\%CHECKFILE% SET CDROM=E:
IF EXIST F:\%CHECKFILE% SET CDROM=F:
IF EXIST G:\%CHECKFILE% SET CDROM=G:
IF EXIST H:\%CHECKFILE% SET CDROM=H:
IF EXIST I:\%CHECKFILE% SET CDROM=I:
IF EXIST J:\%CHECKFILE% SET CDROM=J:
IF EXIST K:\%CHECKFILE% SET CDROM=K:
IF EXIST L:\%CHECKFILE% SET CDROM=L:
IF EXIST M:\%CHECKFILE% SET CDROM=M:
IF EXIST N:\%CHECKFILE% SET CDROM=N:
IF EXIST O:\%CHECKFILE% SET CDROM=O:
IF EXIST P:\%CHECKFILE% SET CDROM=P:
IF EXIST Q:\%CHECKFILE% SET CDROM=Q:
IF EXIST R:\%CHECKFILE% SET CDROM=R:
IF EXIST S:\%CHECKFILE% SET CDROM=S:
IF EXIST T:\%CHECKFILE% SET CDROM=T:
IF EXIST U:\%CHECKFILE% SET CDROM=U:
IF EXIST V:\%CHECKFILE% SET CDROM=V:
IF EXIST W:\%CHECKFILE% SET CDROM=W:
IF EXIST X:\%CHECKFILE% SET CDROM=X:
IF EXIST Y:\%CHECKFILE% SET CDROM=Y:
IF EXIST Z:\%CHECKFILE% SET CDROM=Z:

REM Set our base DIR and call the main system script.
SET BASEDIR=%CDROM%\INSTALL
rem START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %BASEDIR%\SCRIPTS\SYSTEM-INSTALL.CMD %CDROM% %BASEDIR%
START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SYSTEMDRIVE%\TMP\SYSTEM-ANALYZE.CMD %CDROM% %BASEDIR%
GOTO :EOF

REM This is for our test environment
:TEST
@ECHO ON
SET CDROM=E:
SET BASEDIR=%CDROM%\Deployment\CDROM\INSTALL
START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %BASEDIR%\SCRIPTS\SYSTEM-INSTALL.CMD %CDROM% %BASEDIR%
GOTO :EOF

REM This is only called if there is a command line argument error
:ERROR
ECHO Command Line Error
ECHO Valid Options are nothing and TST for install and test
GOTO :EOF

SYSTEM-ANALYZE.CMD

This checks the current CD/DVD drive letter. If the letter is not D:, then it will initiate a two stage reboot to allow windows to reorder the drive, otherwise it will just simply call %CDROM%\INSTALL\SCRIPTS\SYSTEM-INSTALL.CMD which will load the RunOnceEX reg key with the run data to install everything. This is one of two files that are copied to the HD at %SYSTEMDRIVE%\tmp.

@ECHO OFF
CMDOW @ /HID


REM This is called from WINSETUP.CMD

REM Set Evnironment Variables
SET CDROM=%1
SET BASEDIR=%2
SET SCRIPTSDIR=%BASEDIR%\SCRIPTS
SET TOOLSDIR=%BASEDIR%\TOOLS
SET TEMPDIR=%SYSTEMDRIVE%\TMP
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEX

REM Install Tweaks
START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\TWEAK-SYSTEM.CMD %BASEDIR%
START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\TWEAK-REGISTRY.CMD %BASEDIR%
START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\TWEAK-POWER.CMD %BASEDIR%
START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\TWEAK-FILESYSTEM.CMD %BASEDIR%

REM Check for where the DVD-ROM drive is
IF /I "%CDROM%"=="D:" GOTO :ONESTAGE
IF /I NOT "%CDROM%"=="D:" GOTO :TWOSTAGE
GOTO :EOF

:ONESTAGE
START /WAIT CMD.EXE /C %SCRIPTSDIR%\SYSTEM-INSTALL.CMD
GOTO :EOF

:TWOSTAGE
REM RegOnceEX
REG ADD %KEY% /V TITLE /D "Analyze System" /f
REG ADD %KEY%\000 /VE /D "Analyzing System..." /f
REG ADD %KEY%\000 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %TEMPDIR%\SYSTEM-CONFIGURE.CMD" /f
REG ADD %KEY%\001 /VE /D "Rebooting..." /f
REG ADD %KEY%\001 /V 1 /D "%SYSTEMROOT%\System32\SHUTDOWN.EXE -r -t 2" /f
REG ADD %KEY%\001 /V 2 /D "REG DELETE %KEY%\000 /f" /f
REG ADD %KEY%\001 /V 3 /D "REG DELETE %KEY%\001 /f" /f
GOTO :EOF

SYSTEM-CONFIGURE.CMD

After the reboot caused by SYSTEM-ANALYZE.CMD, this script runs to analyze what the current CD/DVD drive letter is and then calls SYSTEM-INSTALL.CMD to load RunOnceEX with the data necessary to install everything. This is the second of two files that is installed onto the HD from the $OEM$ file structure during text mode setup.

@ECHO OFF
CMDOW @ /HID

REM This gets called from RegOnceEx at first login.

REM Find our CD-ROM Drive and set the evnironment variable
SET CHECKFILE=win51ip.SP2
IF EXIST C:\%CHECKFILE% SET CDROM=C:
IF EXIST D:\%CHECKFILE% SET CDROM=D:
IF EXIST E:\%CHECKFILE% SET CDROM=E:
IF EXIST F:\%CHECKFILE% SET CDROM=F:
IF EXIST G:\%CHECKFILE% SET CDROM=G:
IF EXIST H:\%CHECKFILE% SET CDROM=H:
IF EXIST I:\%CHECKFILE% SET CDROM=I:
IF EXIST J:\%CHECKFILE% SET CDROM=J:
IF EXIST K:\%CHECKFILE% SET CDROM=K:
IF EXIST L:\%CHECKFILE% SET CDROM=L:
IF EXIST M:\%CHECKFILE% SET CDROM=M:
IF EXIST N:\%CHECKFILE% SET CDROM=N:
IF EXIST O:\%CHECKFILE% SET CDROM=O:
IF EXIST P:\%CHECKFILE% SET CDROM=P:
IF EXIST Q:\%CHECKFILE% SET CDROM=Q:
IF EXIST R:\%CHECKFILE% SET CDROM=R:
IF EXIST S:\%CHECKFILE% SET CDROM=S:
IF EXIST T:\%CHECKFILE% SET CDROM=T:
IF EXIST U:\%CHECKFILE% SET CDROM=U:
IF EXIST V:\%CHECKFILE% SET CDROM=V:
IF EXIST W:\%CHECKFILE% SET CDROM=W:
IF EXIST X:\%CHECKFILE% SET CDROM=X:
IF EXIST Y:\%CHECKFILE% SET CDROM=Y:
IF EXIST Z:\%CHECKFILE% SET CDROM=Z:

REM Set our environment variables
SET BASEDIR=%CDROM%\INSTALL
SET SCRIPTSDIR=%BASEDIR%\SCRIPTS
SET TOOLSDIR=%BASEDIR%\TOOLS
SET TEMPDIR=%SYSTEMDRIVE%\TMP
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEX

REM RegOnceEX
REG ADD %KEY% /V TITLE /D "Configure System" /f
REG ADD %KEY%\002 /VE /D "Configuring System..." /f
REG ADD %KEY%\002 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\SYSTEM-INSTALL.CMD %CDROM% %BASEDIR%" /f
REG ADD %KEY%\003 /VE /D "Removing Files..." /f
REG ADD %KEY%\003 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C DEL %TEMPDIR%\SYSTEM-CONFIGURE.CMD" /f
REG ADD %KEY%\003 /V 2 /D "%SYSTEMROOT%\System32\CMD.EXE /C DEL %TEMPDIR%\SYSTEM-ANALYZE.CMD" /f
REG ADD %KEY%\004 /VE /D "Rebooting..." /f
REG ADD %KEY%\004 /V 1 /D "%SYSTEMROOT%\System32\SHUTDOWN.EXE -r -t 2" /f
REG ADD %KEY%\004 /V 2 /D "REG DELETE %KEY%\002 /f" /f
REG ADD %KEY%\004 /V 3 /D "REG DELETE %KEY%\003 /f" /f
REG ADD %KEY%\004 /V 4 /D "REG DELETE %KEY%\004 /f" /f

GOTO :EOF

SYSTEM-INSTALL.CMD

This file resides in %CDROM%\INSTALL\SCRIPTS and remains on the CD/DVD. This file load all the RunOnceEX commands that are required to install everything onto the machine.

@ECHO OFF
CMDOW @ /HID



REM Get Our Command Line Parameters
SET CDROM=%1
SET BASEDIR=%2

REM Setup Our Environment
SET SCRIPTSDIR=%BASEDIR%\SCRIPTS
SET TOOLSDIR=%BASEDIR%\TOOLS
SET TEMPDIR=%SYSTEMDRIVE%\TMP
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEX



REM Make sure that our temp directory is present
IF /I NOT EXIST %TEMPDIR% MKDIR %TEMPDIR%

REM Set The Working Directory
CHDIR %SCRIPTSDIR%

REM Install Tweaks
REM START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\TWEAK-SYSTEM.CMD %BASEDIR%
REM START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\TWEAK-REGISTRY.CMD %BASEDIR%
REM START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\TWEAK-POWER.CMD %BASEDIR%
REM START /WAIT %SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\TWEAK-FILESYSTEM.CMD %BASEDIR%

REM RegOnceEX

REM Prepare the Install **MUST BE FIRST**
REG ADD %KEY% /V TITLE /D "Installing Software" /f
REG ADD %KEY%\010 /VE /D "Preparing Installation..." /f
REG ADD %KEY%\010 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\SYSTEM-PREPARE.CMD %BASEDIR%" /f
REG ADD %KEY%\011 /VE /D "Set Video Resolution" /f
REG ADD %KEY%\011 /V /1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\SYSTEM-CHGRES.CMD %BASEDIR%" /f
REG ADD %KEY%\012 /VE /D "Fork Image Rotator" /f
REG ADD %KEY%\012 /V /1 /D "%SYSTEMROOT%\System32\CMD.EXE /C START CMD.EXE /C %SCRIPTSDIR%\SYSTEM-IMAGEROTATE.CMD %BASEDIR%" /f
rem REG ADD %KEY%\013 /VE /D "Set Background Image" /f
rem REG ADD %KEY%\013 /V /1 /D "%SYSTEMROOT%\System32\CMD.EXE /C START CMD.EXE /C %SCRIPTSDIR%\SYSTEM-SETWALLPAPER.CMD %BASEDIR%" /f

REM Install CD Files and Recovery Console
REG ADD %KEY%\100 /VE /D "Installing Windows CD-ROM" /f
REG ADD %KEY%\100 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-CDROM.CMD %CDROM% %BASEDIR%" /f
REG ADD %KEY%\101 /VE /D "Installing Recovery Console" /f
REG ADD %KEY%\101 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-RC.CMD %CDROM% %BASEDIR%" /f

REM Install Software
SET SEQUENCE=110
IF /I EXIST %SCRIPTSDIR%/MAIN-DRIVER.XML CALL :INSTALLDRIVER
SET SEQUENCE=111
IF /I EXIST %SCRIPTSDIR%/MAIN-HOTFIX.XML CALL :INSTALLHOTFIX
SET SEQUENCE=112
IF /I EXIST %SCRIPTSDIR%/MAIN-FONTS.XML CALL :INSTALLFONT
SET SEQUENCE=113
IF /I EXIST %SCRIPTSDIR%/MAIN-MEDIA.XML CALL :INSTALLMEDIA
SET SEQUENCE=114
IF /I EXIST %SCRIPTSDIR%/MAIN-SOFTWARE.XML CALL :INSTALLSOFTWARE

REM Copy over additional files
REG ADD %KEY%\900 /VE /D "Installing Additional Files" /f
REG ADD %KEY%\900 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-FILES.CMD %BASEDIR%" /f

REM Install Scripts
REG ADD %KEY%\901 /VE /D "Installing Scripts" /f
REG ADD %KEY%\901 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-SCRIPTS.CMD %BASEDIR%" /f

REM Set File Permissions
REG ADD %KEY%\902 /VE /D "Set File Permissions" /f
REG ADD %KEY%\902 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\SYSTEM-PERMISSIONS.CMD %BASEDIR%" /f

REM Sequence 990-999 **MUST BE LAST**
REM Cleanup and Reboot
REG ADD %KEY%\994 /VE /D "Cleaning Up" /f
REG ADD %KEY%\994 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\SYSTEM-CLEANUP.CMD %BASEDIR%" /f
REG ADD %KEY%\995 /VE /D "Defragmenting System Harddisk" /f
REG ADD %KEY%\995 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\SYSTEM-DEFRAG.CMD" /f
REG ADD %KEY%\996 /VE /D "Change Registration Information" /f
REG ADD %KEY%\996 /V 1 /D "%TOOLSDIR%\MISC\CHGREG.EXE" /f
REG ADD %KEY%\997 /VE /D "Fork Detached Program" /f
REG ADD %KEY%\997 /V /1 /D "%SYSTEMROOT%\System32\CMD.EXE /C START CMD.EXE /C %SCRIPTSDIR%\SYSTEM-DETACHED.CMD %BASEDIR%" /f
REG ADD %KEY%\998 /VE /D "Set Desktop Image" /f
REG ADD %KEY%\998 /V /1 /D "%SYSTEMROOT%\System32\CMD.EXE /C START CMD.EXE /C %SCRIPTSDIR%\SYSTEM-SETWALLPAPER.CMD %BASEDIR%" /f
REG ADD %KEY%\999 /VE /D "Rebooting..." /f
REG ADD %KEY%\999 /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\SYSTEM-REBOOT.CMD" /f
GOTO :EOF



:INSTALLDRIVER
REG ADD %KEY%\%SEQUENCE% /VE /D "Installing Drivers" /f
REG ADD %KEY%\%SEQUENCE% /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-DRIVER.CMD %BASEDIR%" /f
GOTO :EOF

:INSTALLHOTFIX
REG ADD %KEY%\%SEQUENCE% /VE /D "Installing Hotfixes" /f
REG ADD %KEY%\%SEQUENCE% /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-HOTFIX.CMD %BASEDIR%" /f
GOTO :EOF

:INSTALLFONT
REG ADD %KEY%\%SEQUENCE% /VE /D "Installing Fonts" /f
REG ADD %KEY%\%SEQUENCE% /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-FONTS.CMD %BASEDIR%" /f
GOTO :EOF

:INSTALLMEDIA
REG ADD %KEY%\%SEQUENCE% /VE /D "Installing Media" /f
REG ADD %KEY%\%SEQUENCE% /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-MEDIA.CMD %BASEDIR%" /f
GOTO :EOF

:INSTALLSOFTWARE
REG ADD %KEY%\%SEQUENCE% /VE /D "Installing Software" /f
REG ADD %KEY%\%SEQUENCE% /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-SOFTWARE.CMD %BASEDIR%" /f
GOTO :EOF


REM RunOnceEX install template
:INSTALL
REG ADD %KEY%\%SEQUENCE% /VE /D "Installing " /f
REG ADD %KEY%\%SEQUENCE% /V 1 /D "%SYSTEMROOT%\System32\CMD.EXE /C %SCRIPTSDIR%\INSTALL-.CMD %BASEDIR%" /f
GOTO :EOF

Link to comment
Share on other sites

  • 1 month later...

Dude, there must be a waaaay simplier method

You know, when I run Windows Setup on a new harddisk, create 2 partitions, after install/setup etc the partitions will be C: and E: and CD drive is D:

Ofcourse I want the partitions to have the first letters so I turn off PC,

pull out the CDdrive flat cable, turn on PC, in Windows you will now see the 2nd partition has become D: drive since that letter is free :)

Shutdown pc, flat cable back, turn on pc. Now cddrive is E:.

If you don't want to remove the flat cable, System Management (actually I dont know how its called in English, I mean Start>Run.. MMC.exe)

you can give the CD Drive a different letter like X:.

now the D:\ has become available, so you can give the 2partition this letter.

Now the E: letter has become available, so you can give the CDDrive this letter.. and I am sure this method in a script would be easy..

But it isnt what I want, I rather mod the windows Setup to prevent it from doing it like this. Don't know how..

Edited by ZileXa
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...