RyanVM is a great peace of work, thanks to all who have contributed to this project.
But at its current stage it seems to be only usable for users making CDs because of this strange error "icfgnt.dll, Windows cannot load the Internet Configuration Library" at T15 of the installation when startet by winnt.exe or winnt32.exe
There were some discussions of this problem in this forum and at msfn, see for example:
but all of them I saw ended up with no solution or with some kind of "trial an error" solution like first integrating SP1a, then SP2 which might have worked for someone without realy knowing why.
So I thought its time to debug this problem.
I took a clean XPSP2 with a nearly empty $OEM$ directory and a nearly empty unattend.txt. The installation works fine using winnt.exe. Next step was applaying RyanVM's Updatepack 2.0.2a and doing the same installation again: the error is there!
At this point the system has been reseted und rebooted with a BartPE-CD.
Looking in setuperr.log the first entry is:
C:\$WIN_NT$.~LS\i386\TSHOOT.dll was not copied to C:\WINNT\help\TSHOOT.dll because of the
following error: The operation was canceled by the user.
Searching Drive C:\ showed that the source file to be copied C:\$WIN_NT$.~LS\i386\TSHOOT.dll
does not exist however the destination C:\WINNT\help\TSHOOT.dll does.
Doing some experiments at this point (restarting the installation) showed that always if a file to be copied in GUI-Mode is missing the above error is triggered!
Conclusion of this is: all kind of missing files could trigger this error, watch the first message in %WinDir%\setuperr.log to determine what file caused the error.
Next question was: Why is TSHOOT.dll missing in C:\$WIN_NT$.~LS\i386?
Answer: This is the normal behavior. Before Textmode setup there are about 5500 files in C:\$WIN_NT$.~LS\i386 after that there are about 2300. All files having a number in the eighth field like "20" in
tshoot.inf = 1,,,,,,,20,0,0
are decompressed to their destination (%WinDir%\inf in this case) and get deleted in C:\$WIN_NT$.~LS\i386, in other words, they are moved while files with an empty eighth field like
tshoot.cab = 1,,,,,,,,3,3
seem to stay untouched in textmode.
This is the same with and without RyanVMs Updatepack applied. But where is the differnce?
Studying setuplog.txt of a system without Updatepack shows that there is no try to copy tshoot.dll in GUI mode. There seems to be a diffrent interpratation of the flags field "4" in [Copyfiles] Section in tshoot.inf:
The MSDN online documentation of the flags field says:
Ignore file versions and write over existing files in the destination directory. This flag and the next two are mutually exclusive. This flag is irrelevant to digitally signed INF files.
Since the tshoot.inf file is the same in both cases it seems without Updatepack to be interpreted as digitally signed and with it as not digitally signed. Or there are diffrent setup modules with and without Updatepack. I can't explain this.
Next Qustion is: What we can do to make the install proceed without errors?
Answer 1: Changing tshoot.inf so that it not tries to copy these files. But there is no guess, if this would have any side effects.
Answer 2: Manipulate the txtsetup.sif that these files are not moved but copied in textmode setup.
Investigating if there are already files that were copied and what syntax is used to declare this I found that there are such files and that their common property in txtsetup.sif is the value "16" in the [FileFlags] section like
kbdclass.sys = 16
So I simply added to [FileFlags]
BNTS.DLL = 16
TSHOOT.DLL = 16
SNIFFPOL.DLL = 16
SSTUB.DLL = 16
what brought my installation to a similar problem in netupnph.inf. I had to add 6 more files:
SSDPSRV.DLL = 16
SSDPAPI.DLL = 16
UPNP.DLL = 16
UPNPHOST.DLL = 16
UPNPCONT.EXE = 16
UDHISAPI.DLL = 16
And that's all so far to make my unattend setup run without errors. Since there are still no OEM drivers and no values under [Components] in unattend.txt the destination system is not usable. But before I go on I wanted to share my solution with others.
My next Question is: Is there a possibility to insert these lines via entries.ini?