Jump to content

Install 2000/XP/2003 from RAM loaded small ISO


ilko_t

Recommended Posts

how stupid Im, I should have tested to run mkisofs.exe before writing

This is just cygwin1.dll missing

"This application has failed to start because cygwin1.dll was not found" :whistle:

Else I have shortened paths and exe name but the log didnt changed, I think that is just about the missing cygwin lib I dont have it Im much with mingw liter

so a workaround would be to find a mkisofs not cygwin-ed nor to include the lib.

Edited by class101
Link to comment
Share on other sites


I confirm the .iso is created with new version now :) I will do further test later I should go out to see a friend but as far I can see yet in logs it looks all good, the ERROR message is removed aswell

2009/11/20 21:18:05- Copying completed. Took: 411.64418913577 seconds
2009/11/20 21:18:05- Creating boot ISO
2009/11/20 21:18:05- Launching MkMigrateInf4.cmd
2009/11/20 21:18:06- Ensuring presetup is launched
2009/11/20 21:18:06- setupORG.exe not found, replacing the original file
2009/11/20 21:18:06- mkisofs.exe -iso-level 4 -volid ""WIN_SETUP"" -R -o C:\WinSetup\temp\XP_x64 C:\WinSetup\temp\
2009/11/20 21:18:09- Checking sizes...
2009/11/20 21:18:09- Total source size- 0 MB
2009/11/20 21:18:09- Target space available- 27488 MB
2009/11/20 21:18:09- Getting USB drives information

Keep it up that very helpful script , saves DVD and thats faster, good for the planet ;)

Link to comment
Share on other sites

yet testing a XP SP3 32bit in Qemu 0.11.x and virtual 10GB hdd, NTFS Primary Active partition for WinSetup files on hd0 and C: destination partition on the hd1 (been able to get C: that way good job :) )

All seems fine until the Setup GUI is reached, is returned an unknown path

GLOBALROOT\Device\Harddisk0\Partition1\WIN_SETUP\XP\I386

which is fixed just by adding \\?\ in front of the path, that way

\\?\GLOBALROOT\Device\Harddisk0\Partition1\WIN_SETUP\XP\I386

I have to repeat that ~30 times and the next parts of the install goes fine

At least I'm sure you should add \\?\ somewhere ilko because I have noted this small problem since the beginning of your project when it was called USB_MultiBoot_10

Edited by class101
Link to comment
Share on other sites

Uploaded a new version. Fixsrcpath.exe does not work that early in XP 32 bit, fixsrcpath.cmd is used instead. For 64-bit the exe is used.

@class101

The reason it didn't work is above, please use the new version.

Adding \\?\ at front is a nice idea, I'll play with that a bit.

As for USB-multiboot- it does not use any of this stuff, modifying boot and source paths, so no idea what exactly you have in mind.

Link to comment
Share on other sites

I have partially solutionned the last problem with your last version ilko

for XP SP3 32bit, files copy + boot + txt setup ok, gui setup ok, installation 100% ok

for XP SP2 64bit, files copy + boot + txt setup ok, gui setup wrong path and installation uncomplete, missing inf registration, unstable os

XP x64 still has a wrong srcpath = \??\\WIN_SETUP\XP_x64\, it should be \\?\GLOBALROOT\Device\Harddisk1\Partition1\WIN_SETUP\XP_x64\AMD64 nor according to XP you are expecting D: to host it but thats not the case here I have checked all letters at setup gui boot they are all unaccessible

I have found out that it is linked to your precmd script and 64bit version because on xp 32bit your "pushd D:" correctly mounts the installation files to D: but under 64bit D: is accessible later during the Device setup when 34 minutes lasts, there is no possible ways to get install files from a drive letter at the very beginning of setup gui unlike xp 32bit.

Thats probably why I get all these .inf problems because in the background, windows stores this wrong path for a later use and it does not alert if the path is wrong, it passes over giving an uncomplete and unstable Xp 64bit

The way you setup src path is to review I think

presetup.log

srcpath = \??\\WIN_SETUP\XP_x64\

regopt.log

************************************************************
Region and Languages Options Unattended Mode Log
************************************************************

/f:"C:\WINDOWS\system32\$winnt$.inf" /s:"GLOBALROOT\??\\WIN_SETUP\XP_X64\AMD64"

Switch /F detected!
Switch /S detected!
In setup mode!
The unattended mode file path is: \$winnt$.inf
Supplemental Language Support installation cancelled - The operation was canceled by the user.



************************************************************
Region and Languages Options Unattended Mode Log
************************************************************

/I /s:"GLOBALROOT\??\\WIN_SETUP\XP_X64\AMD64"

Switch /I detected!
Switch /S detected!
In setup mode!

setupact.log

The external program RUNDLL32 shell32,Control_RunDLL intl.cpl,,/f:"C:\WINDOWS\system32\$winnt$.inf" /s:"GLOBALROOT\??\\WIN_SETUP\XP_X64\AMD64" returned exit code 0.
Setup aborted processing the file queue because of the following error:
The operation completed successfully.

Edited by class101
Link to comment
Share on other sites

You've basically run into the problem we are trying to resolve since the beginning ;)

Yes, 64 bit versions do not mount and give drive letter to the USB drive early and this is the main problem. This leads to all kind la problems- every application during GUI, expecting a drive letter fails. Getting around this, using \\?\GLOBALROOT\Device\Harddisk1\Partition1\WIN_SETUP\XP_x64\AMD64 is not a solution, for example BTS driver pack will not install too, it expects to find the drive letter of the CD(USB) drive and extract files from there.

srcpath = \??\\WIN_SETUP\XP_x64\ in presetup.log is a clear indication, that drive letter for the USB drive was not found. Look at presetup.cmd- srcpath = \??\%CDDRIVE%\...... in this case %CDDRIVE% was null.

Srcpath should have been \??\D:\WIN_SETUP\XP_x64\, which is later (right after real setup is launched) translated to D:\WIN_SETUP\XP_x64\, saved as the value of dospath in $winnt$.inf and used for the rest of the setup.

Pushd uses %CDDRIVE% variable too, but in this case it pushes nothing.

Yesterday I managed to recreate the problem on 32 bit XP SP3 and another computer, using USB hard disk- same problem, USB partitions not mounted. Setup transferred to USB stick- everything normal, on the very same machine.

The difference with 64 bit versions (2003 in particular), was that in XP 32 bit diskpart showed USB partitions as volumes, and I could assign a drive letter, whereas in 2003 x64 those volumes were not present at all.

Played with BIOS setting how USB boot is performed- via a hotkey or hard coded in boot order- no difference.

Tried also to start GUI from the internal disk directly changing BIOS settings as well- again no luck.

You can play with that- when you see the error message asking for the source files hit SHIFT + F10 and start DISKPART, then issue "LIST VOL".

This is still in experimental stage, looks quite promising method, avoiding all the limitations of the other methods, but still has to be fully explored.

Have quite busy days at work, and although it's driving me nuts to find out what's happening exactly, will have to postpone tests for a while.

Link to comment
Share on other sites

You've basically run into the problem we are trying to resolve since the beginning ;)
Yes.
The only problems I got were with USB hard disk and 64-bit versions, this could be because of the IDEtoUSB adapter I am using. At start of GUI mode partitions on USB disk do not get drive letters.
I've the same experience and no explanation still.

XP SP2 64 bit:

A average USB stick or SD card reader inserted:

PNP does detect the SD card reader and load drivers.

Found New Hardare

Your new hardware is installed and ready to use

This SD card reader does get a drive letter.

The strange SD card reader inserted to new installed windows.

PNP does detect the SD card reader and load drivers.

However next there is a message:

System settings Change

Windows has finished installing new devices. The software that support your devices requires that you restart your computer. You must restart your computer ferfore the new settings will take effec.

Do you want to restart your computer now?

This SD card reader dosn't get a drive letter.

USB hard disk dosn't get a dive letter too.

All USB drivers are loaded (demand start by HKLM\SYSTEM\CurrentControlSet\Enum), but no letter assigned.

At first reboot system is in SystemSetupInProgress mode, hence PE.

This remids to: At PE a USB hard disk dosn't get a drive letter if connected after boot.

Work arround:

load USB drivers at [bootBusExtenders.Load] and disable at [inputDevicesSupport.Load].

I used pyron's 64 bit debug fake setup for debug reasons: nice to get a output on screen.

@echo off
setlocal EnableExtensions EnableDelayedExpansion

SET TAGFILE=\WIN_SETUP
FOR %%h IN (U C D E F G H I J K L M N O P Q R S T V W X Y) DO (
IF EXIST "%%h:%TAGFILE%" (
SET CDDRIVE=%%h:
goto :CDDRIVE_found
)
)
echo no %TAGFILE% drive found
echo no %TAGFILE% drive found >> winsetup.log
:CDDRIVE_found
set srcpath=\??\%CDDRIVE%\%TAGFILE%\XP_X64\

echo CDDRIVE %CDDRIVE% - srcpath %srcpath%
echo CDDRIVE %CDDRIVE% - srcpath %srcpath% >> winsetup.log

echo adjust $winnt$.inf: sourcepath = \??\%CDDRIVE%\%TAGFILE%\XP_X64\ >> winsetup.log
if exist $winnt$.new del /f $winnt$.new
FOR /F "tokens=1* delims== " %%a in ($winnt$.inf) DO (
set line=%%a = %%b
if %%b.==. set line=%%a
IF /I sourcepath.==%%a. set line=sourcepath = "%srcpath%"
IF /I dospath.==%%a. set line=;
echo !line!>>$winnt$.new
)
if exist $winnt$.new (
ren $winnt$.inf $winnt$.0
if exist $winnt$.inf del $winnt$.inf
ren $winnt$.new $winnt$.inf
)

rem start /min "USB keep mount work arround" pushd %CDDRIVE%


REM +=======================================================+
REM | Finally start the installation |
REM |-------------------------------------------------------|
if exist setupold.exe del /f setupold.exe >> winsetup.log
if exist setup.exe ren setup.exe setupold.exe
if exist setupORG.exe ren setupORG.exe setup.exe

rem often setup.exe -newsetup
FOR /F "tokens=1-2*" %%a IN ('reg.exe query "HKLM\SYSTEM\Setup" /v "CmdLine"') DO (
set CmdLine=%%c)
IF "%CmdLine:~-2%"=="\0" set CmdLine=%CmdLine:~0,-2%
(echo. &echo run setup CmdLine: %CmdLine% - %date% %time%)
(echo. &echo run setup CmdLine: %CmdLine% - %date% %time%) >> winsetup.log
start /WAIT %CmdLine%
REM +=======================================================+

In addition there are strange machines. USB hardware is initialized late at boot.

No hardware to test.

Link to comment
Share on other sites

I have managed to temporarily finish my XP X64 SP2 setup 100% done here.

1) TXT setup

2) with a famous bootcd copying install partition from hd0 to an unpartitioned space on h1 our destination windows with partition magic 8 for dos, dont hide and dont set active the newly created part, it will be D: on GUI setup

3) GUI Setup works as on XP X32 SP3, no invalid paths warnings, cmd prompt is in D: so pushd D: worked

4) Im yet inside X64 and all my past problems solved, IE windowsupdate and all other missing stufffs I had reported are installed correctly now

In case you do not find a workaround dude that maybe enough to code a warning that on X64 you have to copy files between TXTsetup and GUI, it does not requires more hacks because I haven't edited at your files and it worked perfectly as for the 32bit version

Edited by class101
Link to comment
Share on other sites

Uploaded a new version. Fixsrcpath.exe does not work that early in XP 32 bit, fixsrcpath.cmd is used instead. For 64-bit the exe is used.

@class101

The reason it didn't work is above, please use the new version.

Adding \\?\ at front is a nice idea, I'll play with that a bit.

As for USB-multiboot- it does not use any of this stuff, modifying boot and source paths, so no idea what exactly you have in mind.

I didn't think autoit3 files worked during the pre setup phase. In the past I tried creating a much better setup.exe based on pyrons method. But I was very dissapointed to find out it wouldn't work with autoit3 files. I almost thought you found a workaround. ;) I hopefully will get some time to test out your mini iso idea later this week. I am very eager to try my idea with multiple mini ISO files.

Link to comment
Share on other sites

In the past I tried creating a much better setup.exe based on pyrons method.
Thanks, a volunteer :whistle:

Can you forward the command line?

At fake setup: read the given command line and forward the command line to presetup.cmd?

XP 64: still no USB hard disk explanation.

Work arround updated: Boot driver settings enhanced at presetup.cmd.

Txtsetup.sif can be adjuted at [bootBusExtenders.Load] and at [inputDevicesSupport.Load].

This is not necessary.

1) If USB drive is available, just continue.

2) If USB drive is missing, set minimal USB driver settings and reboot.

PNP overwrite the settings later. After installation there are default USB settings.

3) If USB drive is missing still, set enhanced USB driver settings and reboot.

There are non default settings after full installation.

4) If USB drive is available still, no further trials, just continue and read the error.

At pyron's fake, 64 bit compiled

@echo off
setlocal EnableExtensions EnableDelayedExpansion

SET TAGFILE=\WIN_SETUP
FOR %%h IN (U C D E F G H I J K L M N O P Q R S T V W X Y) DO (
IF EXIST "%%h:%TAGFILE%" (
SET CDDRIVE=%%h:
goto :CDDRIVE_found
)
)

echo no %TAGFILE% drive found
echo no %TAGFILE% drive found >> winsetup.log

REM +=======================================================+
REM | prepare USB boot configuration |
REM |-------------------------------------------------------|
echo presetup fixBoot.USB
set reboot=

rem second trial: permanent USB changes
if exist reboot.1 if not exist reboot.2 (
set reboot=true
echo reboot ÚSB driver setting >reboot.2
echo prepare USB boot configuration %date% %time% - permanent changes >>winsetup.log
call :set_usb_boot_setting_full SYSTEM CurrentControlSet
reg.exe load HKLM\loaded_SYSTEM config\system.sav
call :set_usb_boot_setting_full loaded_SYSTEM ControlSet001
reg.exe unload HKLM\loaded_SYSTEM
)

rem first trial: minimal, no permanent changes
if not exist reboot.1 (
set reboot=true
echo reboot ÚSB driver setting >reboot.1
echo prepare USB boot configuration %date% %time% - minimal changes>>winsetup.log
call :set_usb_boot_setting SYSTEM CurrentControlSet
reg.exe load HKLM\loaded_SYSTEM config\system.sav
call :set_usb_boot_setting loaded_SYSTEM ControlSet001
reg.exe unload HKLM\loaded_SYSTEM
)

REM +=======================================================+
REM | reboot the machine once, avoid endless loop |
REM |-------------------------------------------------------|
if defined reboot (
(echo reboot %date% %time% &echo.)>> winsetup.log
goto :eof
)



:CDDRIVE_found ===============================================
set srcpath=\??\%CDDRIVE%%TAGFILE%\XP_X64\

echo CDDRIVE %CDDRIVE% - srcpath %srcpath%
echo CDDRIVE %CDDRIVE% - srcpath %srcpath% >> winsetup.log

if exist $winnt$.new del /f $winnt$.new
FOR /F "tokens=1* delims== " %%a in ($winnt$.inf) DO (
set line=%%a = %%b
if %%b.==. set line=%%a
rem requires a drive letter still
rem IF /I sourcepath.==%%a. set line=sourcepath = "\\?\GLOBALROOT\Device\Harddisk1\Partition1\WIN_SETUP\XP_X64"
IF /I sourcepath.==%%a. set line=sourcepath = "%srcpath%"
IF /I dospath.==%%a. set line=;
echo !line!>>$winnt$.new
)
if exist $winnt$.new (
ren $winnt$.inf $winnt$.0
if exist $winnt$.inf del /f $winnt$.inf
ren $winnt$.new $winnt$.inf
)

findstr.exe "sourcepath" $winnt$.inf
findstr.exe "sourcepath" $winnt$.inf >> winsetup.log

rem required at all?
rem start /min "USB keep mount work arround" pushd %CDDRIVE%


REM +=======================================================+
REM | Finally start the installation |
REM |-------------------------------------------------------|
if exist setupold.exe del /f setupold.exe >> winsetup.log
if exist setup.exe ren setup.exe setupold.exe
if exist setupORG.exe ren setupORG.exe setup.exe

rem often setup.exe -newsetup
FOR /F "tokens=1-2*" %%a IN ('reg.exe query "HKLM\SYSTEM\Setup" /v "CmdLine"') DO (
set CmdLine=%%c)
IF "%CmdLine:~-2%"=="\0" set CmdLine=%CmdLine:~0,-2%
(echo. &echo run setup CmdLine: %CmdLine% - %date% %time%)
(echo. &echo run setup CmdLine: %CmdLine% - %date% %time%) >> winsetup.log
start /WAIT %CmdLine%
REM +=======================================================+

EXIT
goto :eof =============================================================


:set_usb_boot_setting =================================================
set Services=HKLM\%1\%2\Services
echo on
reg.exe query "%Services%\usbohci" | findstr.exe /I "Start" && (
reg.exe add "%Services%\usbohci" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbohci" /f /v "Group" /d "Boot Bus Extender"
)
reg.exe query "%Services%\usbuhci" | findstr.exe /I "Start" && (
reg.exe add "%Services%\usbuhci" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbuhci" /f /v "Group" /d "Boot Bus Extender"
)
reg.exe query "%Services%\usbehci" | findstr.exe /I "Start" && (
reg.exe add "%Services%\usbehci" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbehci" /f /v "Group" /d "Boot Bus Extender"
)
reg.exe add "%Services%\usbhub" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbhub" /f /v "Group" /d "System Bus Extender"
reg.exe add "%Services%\usbstor" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbstor" /f /v "Group" /d "System Bus Extender"
@echo off
goto :eof === end set_usb_boot_setting ===============================


:set_usb_boot_setting_full ============================================
set CriticalDeviceDatabase=HKLM\%1\%2\Control\CriticalDeviceDatabase
set Services=HKLM\%1\%2\Services

echo on
reg.exe add "%CriticalDeviceDatabase%\PCI#CC_0C0300" /f /v "ClassGUID" /d "{36FC9E60-C465-11CF-8056-444553540000}"
reg.exe add "%CriticalDeviceDatabase%\PCI#CC_0C0300" /f /v "Service" /d "usbuhci"

reg.exe add "%CriticalDeviceDatabase%\PCI#CC_0C0310" /f /v "ClassGUID" /d "{36FC9E60-C465-11CF-8056-444553540000}"
reg.exe add "%CriticalDeviceDatabase%\PCI#CC_0C0310" /f /v "Service" /d "usbohci"

reg.exe add "%CriticalDeviceDatabase%\PCI#CC_0C0320" /f /v "ClassGUID" /d "{36FC9E60-C465-11CF-8056-444553540000}"
reg.exe add "%CriticalDeviceDatabase%\PCI#CC_0C0320" /f /v "Service" /d "usbehci"

reg.exe add "%CriticalDeviceDatabase%\USB#CLASS_08" /f /v "ClassGUID" /d "{36FC9E60-C465-11CF-8056-444553540000}"
reg.exe add "%CriticalDeviceDatabase%\USB#CLASS_08" /f /v "Service" /d "usbstor"

reg.exe add "%CriticalDeviceDatabase%\USB#CLASS_09" /f /v "ClassGUID" /d "{36FC9E60-C465-11CF-8056-444553540000}"
reg.exe add "%CriticalDeviceDatabase%\USB#CLASS_09" /f /v "Service" /d "usbhub"

reg.exe add "%CriticalDeviceDatabase%\USB#ROOT_HUB" /f /v "ClassGUID" /d "{36FC9E60-C465-11CF-8056-444553540000}"
reg.exe add "%CriticalDeviceDatabase%\USB#ROOT_HUB" /f /v "Service" /d "usbhub"

reg.exe add "%CriticalDeviceDatabase%\USB#ROOT_HUB20" /f /v "ClassGUID" /d "{36FC9E60-C465-11CF-8056-444553540000}"
reg.exe add "%CriticalDeviceDatabase%\USB#ROOT_HUB20" /f /v "Service" /d "usbhub"

reg.exe add "%Services%\usbohci" /f /v "Group" /d "Boot Bus Extender"
reg.exe add "%Services%\usbohci" /f /t REG_DWORD /v "Tag" /d 3
reg.exe add "%Services%\usbohci" /f /t REG_DWORD /v "ErrorControl" /d 1
reg.exe add "%Services%\usbohci" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbohci" /f /t REG_DWORD /v "Type" /d 1

reg.exe add "%Services%\usbuhci" /f /v "Group" /d "Boot Bus Extender"
reg.exe add "%Services%\usbuhci" /f /t REG_DWORD /v "Tag" /d 3
reg.exe add "%Services%\usbuhci" /f /t REG_DWORD /v "ErrorControl" /d 1
reg.exe add "%Services%\usbuhci" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbuhci" /f /t REG_DWORD /v "Type" /d 1

reg.exe add "%Services%\usbehci" /f /v "Group" /d "Boot Bus Extender"
reg.exe add "%Services%\usbehci" /f /t REG_DWORD /v "Tag" /d 3
reg.exe add "%Services%\usbehci" /f /t REG_DWORD /v "ErrorControl" /d 1
reg.exe add "%Services%\usbehci" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbehci" /f /t REG_DWORD /v "Type" /d 1

reg.exe add "%Services%\usbhub" /f /v "Group" /d "System Bus Extender"
reg.exe add "%Services%\usbhub" /f /t REG_DWORD /v "Tag" /d 2
reg.exe add "%Services%\usbhub" /f /t REG_DWORD /v "ErrorControl" /d 1
reg.exe add "%Services%\usbhub" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbhub" /f /t REG_DWORD /v "Type" /d 1

reg.exe add "%Services%\usbstor" /f /v "Group" /d "System Bus Extender"
reg.exe add "%Services%\usbstor" /f /t REG_DWORD /v "Tag" /d 7
reg.exe add "%Services%\usbstor" /f /t REG_DWORD /v "ErrorControl" /d 1
reg.exe add "%Services%\usbstor" /f /t REG_DWORD /v "Start" /d 0
reg.exe add "%Services%\usbstor" /f /t REG_DWORD /v "Type" /d 1
@echo off
goto :eof === end set_usb_boot_setting_full ============================

Link to comment
Share on other sites

  • 2 weeks later...

Thanks cdob.

Run a few tests on real hardware with the same USB hard disk, using USB-IDE adapter. Added changes to txtsetup.sif for starting usb group earlier. Left changes to USB at start of GUI as a backup.

None of the tested versions (2000-XP-2003 32 and 64 bit) required reboot at start of GUI and installed right to the end.

Why did you give up on changing txtsetup.sif? Did you encounter any troubles using it only?

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...