Help - Search - Members - Calendar
Full Version: SED, INF, DDF file format description
MSFN Forums > Microsoft Software Products - Discussion & Support > Windows 95/98/98SE/ME > Windows 9x Member Projects
Pages: 1, 2

   
Google Internet Forums Unattended CD/DVD Guide
Petr
Does anybody have detail description of the SED (Self Extraction Directive) files used by IEXPRESS?
Several thing are unclear to me. For example, how to set the target OS to both Windows 98 first and second editions? I tried
TargetWin9xVersion=4.10
recommended here, but it does not work. Then there is some possibility to test a version of specific file, I have found one example at http://www.lv.kernel.org/pub/recommended/l...tnew/latnet.sed :
TargetFileVersion=#A\IEXPLORE.EXE:4.70.0.1155-:%BrowserWarn%:OK
But what does this mean exactly? Does it work for more versions and more files?
There is also
CDFVersion=3
instead of regular
SEDVersion=3
What this could mean?
And other unclarities.

Is there any decompiler of IEXPRESS packages that would extract the license, the messages and other settings, not just the files in the CAB inside?

Regarding MAKECAB, I've found http://support.microsoft.com/?id=310618 (d/l at
http://download.microsoft.com/download/pla...n-us/cabsdk.exe )
This is March 1997 version and it contains 33-page Makecab.doc documentation describing the DDF files too.

No newer file was found.

And regarding INF files, there are several sources like Windows 98 DDK
http://msdn.microsoft.com/library/en-us/in...72ebb16.xml.asp
http://msdn.microsoft.com/library/en-us/in...b9d8dbb.xml.asp
but it seems to be a bit driver oriented, I'm not sure if there is everything.
Does anybody know any better description?

Petr
MDGx
I'm wondering if anybody [except MS] has such info at all, I've also been searching the net, but unfortunately found nothing.
erpdude8 suggested I should email MS, so I can build hotfixes that would install on more than 1 particular 9x OS, because if using
TargetWin9xVersion=4.10.2222
[example], the patch will only install on 98SE, but not on 98FE.
To make it install on 98FE [but not on 98SE], this line must be
TargetWin9xVersion=4.10.1998

As far as I can tell TargetWin9xVersion= [or TargetNTVersion=] must have full OS build in this form:
x.x.xxxx
or
x.xx.xxxx
otherwise won't work.
If using
TargetWin9xVersion=0
the patch won't install on any 9x OS.
Similarly, if using
TargetNTVersion=0
the patch won't install on any NTx OS.
U can combine these 2 lines by adding 1 of each in your SED file, but u can't use more than 1 of each to specify multiple OSes.

BTW:
Newest versions of IEXPRESS.EXE, MAKECAB.EXE + WEXTRACT.EXE [the ones I'm using] are from XP SP2. They work for 9x/ME patches too.
I believe 2003 Server also has these files, but haven't tried.

The SED file you mention:
http://www.lv.kernel.org/pub/recommended/l...tnew/latnet.sed
is actually taken from NT Option Pack:
http://www.gpick.net/sbr/asp/page103.asp
respectively from this CAB file [right-click to save it]:
ftp://tiger.gpick.com/NTOptionPack/windows95/rasics.cab

SED = Self Extraction Directive

CAB SDK + IEAK:
http://www.mdgx.com/add.htm#DEV
eGo®Z
some years ago i've found so much different manuals on inf-coding,
unfortunately the most of the sources are dead now,
one of 'em is www.crucifer.net - site is under construction more than year,
Here is my local copy of such web manual from that site.
Of course it's not the latest inf-description and sed-files are described not completely, but it is quite good manual.
- hope this helps blink.gif
Petr
QUOTE (MDGx @ Jun 25 2005, 12:50 AM)
Newest versions of IEXPRESS.EXE, MAKECAB.EXE + WEXTRACT.EXE [the ones I'm using] are from XP SP2. They work for 9x/ME patches too.
I believe 2003 Server also has these files, but haven't tried.

Yes, there are really many versions:
iexpress.exe
ieak6: 6.00.2800.1106
win xp: 6.00.2600.0000 (xpclient.010817-1148)
win xp sp2: 6.00.2900.2180 (xpsp_sp2_rtm.040803-2158)
win 2003: 6.00.3790.0 (srv03_rtm.030324-2048)
win 2003 sp1: 6.00.3790.1830 (srv03_sp1_rtm.050324-1447)
wextract.exe
ieak6: 6.00.2800.1106
win xp: 6.00.2600.0000 (xpclient.010817-1148)
win xp sp2: 6.00.2900.2180 (xpsp_sp2_rtm.040803-2158)
win 2003: 6.00.3790.0 (srv03_rtm.030324-2048)
win 2003 sp1: unchanged
advpack.dll
ieak6: 5.1.2600.1106
win xp: 6.00.2600.0000 (xpclient.010817-1148)
win xp sp2: 6.00.2900.2180 (xpsp_sp2_rtm.040803-2158)
win 2003: 6.00.3790.0 (srv03_rtm.030324-2048)
win 2003 sp1: 6.00.3790.1830 (srv03_sp1_rtm.050324-1447)
makecab.exe
ieak6: 5.1.2600.1106
win xp: 5.1.2600.0 (xpclient.010817-1148)
win xp sp2: 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
win 2003: 5.2.3790.0 (srv03_rtm.030324-2048)
win 2003 sp1: unchanged
extrac32.exe
ieak6: 4.11.0603.3
win xp: 5.1.2600.0 (xpclient.010817-1148)
win xp sp2: 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
win 2003: 5.2.3790.0 (srv03_rtm.030324-2048)
win 2003 sp1: unchanged

Appareatly all versions works fine on Windows 98.
I was not able to locate any difference in resources - ut ther must be raeson for so many versions?

Petr
eGo®Z
also very useful link thumbup.gif
http://perso.wanadoo.fr/tmcd2/
Petr
QUOTE (MDGx @ Jun 25 2005, 12:50 AM)
I'm wondering if anybody [except MS] has such info at all, I've also been searching the net, but unfortunately found nothing.
erpdude8 suggested I should email MS, so I can build hotfixes that would install on more than 1 particular 9x OS, because if using
TargetWin9xVersion=4.10.2222
[example], the patch will only install on 98SE, but not on 98FE.
To make it install on 98FE [but not on 98SE], this line must be
TargetWin9xVersion=4.10.1998

As far as I can tell TargetWin9xVersion= [or TargetNTVersion=] must have full OS build in this form:
x.x.xxxx
or
x.xx.xxxx
otherwise won't work.
If using
TargetWin9xVersion=0
the patch won't install on any 9x OS.
Similarly, if using
TargetNTVersion=0
the patch won't install on any NTx OS.
U can combine these 2 lines by adding 1 of each in your SED file, but u can't use more than 1 of each to specify multiple OSes.
*


Elementary, my dear Watson.

Some deductive works and tests and here is the result:

TargetWin9xVersion=aa.bb.cc-dd.ee.ff,gg.hh.ii-jj.kk.ll

it means from version aa.bb.cc to version dd.ee.ff and from version gg.hh.ii to version jj.kk.ll.

Can be simplified as

TargetWin9xVersion=aa.bb.cc,gg.hh.ii (it means just versions aa.bb.cc and gg.hh.ii)
TargetWin9xVersion=aa.bb.cc-dd.ee.ff (it means versions between aa.bb.cc and dd.ee.ff)

TargetWin9xVersion=0 means version 0 only => never wil install on W9x
TargetWin9xVersion= or no line at all: will install always on W9x
TargetWin9xVersion=4.10.1998- means 4.10.1998 and above

TargetWin9xVersion=4.10.1998 is the same as TargetWin9xVersion=4.10.1998-4.10.1998

Commonly used version ranges by Microsoft:
TargetWin9xVersion=4.0.950-4.0.1212 - Windows 95
TargetWin9xVersion=4.10.1998-4.10.2222 - Windows 98
TargetWin9xVersion=4.90.3000 - Windows ME

the same for TargetNTVersion

Is anybody able to test it?

Petr
Petr
And just to add how it appears to be with the TargetFileVersion directive:
Example is:
TargetFileVersion=#A\IEXPLORE.EXE:4.70.0.1155-:%BrowserWarn%:OK

#A means probably application
#S means system file (located in %windir%\system)
Maybe ther are other possibilities, I don't know.

For version number(s) it the same as for TargetWin9xVersion, but versipn has 4 parts, i.e. it can look like:
TargetFileVersion=#A\APPLICATION.EXE:1.2.3.4-3.4.5.6,5.6.7.8-6.7.8.9:%AppWarning%:OK

I'm still not sure what means the "OK" at the end and what are other possibilities.

BTW, some coder could write very simple tool that would just show the required OS version and FileVersion for given iexpress package.
FileVersions are coded as 4 words (8 bytes total) is the following sequence: For version a.b.c.d the order in the file is b,a,d,c,, no limit = FFFFFFFF
OSVersions are coded as 3 doublewords (12 bytes total) ordered naturally, no limit is FFFFFFFFFFFF.

Petr
Petr
Does anybody know how to make very long list of "CopyFiles" in INF files?

If I make very long line like:

CODE
[DefaultInstall]
SmartReboot          = N
CustomDestination    = CustomDestination.Section
CopyFiles            = Copy.Boot,Copy.Cab, Copy.Command, Copy.EBD, Copy.Font, Copy.Grphflt, Copy.Grphflt2, Copy.Help, Copy.HT, Copy.Inf, Copy.IOSubSys, Copy.Machine, Copy.Media, Copy.MSADC, Copy.MSDA, Copy.msinfo, Copy.MUI, Copy.System, Copy.System32, Copy.SysBckup, Copy.TC, Copy.Triedit, Copy.Tvviewer, Copy.VMM32, Copy.KB891711
(white spaces added not to break msfn page layout)

I will get rundll/advack crash.

Is there any known length limit?

How to avoid this?

I have only one idea - to chain 2 INF files, not very nice.

Petr
MDGx
QUOTE (Petr @ Jun 26 2005, 06:55 PM)
Does anybody know how to make very long list of "CopyFiles" in INF files?

If I make very long line like:

CODE
[DefaultInstall]
SmartReboot          = N
CustomDestination    = CustomDestination.Section
CopyFiles            = Copy.Boot,Copy.Cab, Copy.Command, Copy.EBD, Copy.Font, Copy.Grphflt, Copy.Grphflt2, Copy.Help, Copy.HT, Copy.Inf, Copy.IOSubSys, Copy.Machine, Copy.Media, Copy.MSADC, Copy.MSDA, Copy.msinfo, Copy.MUI, Copy.System, Copy.System32, Copy.SysBckup, Copy.TC, Copy.Triedit, Copy.Tvviewer, Copy.VMM32, Copy.KB891711
(white spaces added not to break msfn page layout)

I will get rundll/advack crash.

Is there any known length limit?

How to avoid this?

I have only one idea - to chain 2 INF files, not very nice.

Petr
Petr,

Wow, looks like u solved the SED "Targetxx" problem.
Many thanks for your hard work.

I'll try your tips to recreate some of my iexpress packages to make them install on both 98FE + 98SE.

I found something about INF "CopyFiles" directive length limit @ MSDN:
http://msdn.microsoft.com/library/en-us/in...fb2d300.xml.asp
and other good to know INF limits.

But here is my idea [besides deleting all spaces, which I'm sure you've done already]:
try to shorten each string to 1, 2 or 3 characters.
Example [applies to the 1 u posted] = broken in half by 1 space so it will fit in this page:
CODE
CopyFiles=CBT,CCB,CMD,CEB,CF,CGR,CGR2,CHL,CHT,CIN,CIO,CMA,CME, CMS,CMI,CMU,CS,CS32,CSB,CTC,CTR,CTV,CVM,CKB891711

This way string length was reduced from 285 chars to 102 chars [not counting the "CopyFiles" string]. Now it should work ok.

Hope this helps.
ack-hh
QUOTE (Petr @ Jun 27 2005, 02:55 AM)
Is there any known length limit?

from http://msdn.microsoft.com/library/en-us/in...fb2d300.xml.asp :
"INF Size Limits
A Windows 9x/Me INF file cannot be larger than 64 kilobytes.
There is no practical limit to the size of an INF file for NT-based systems.
Unless otherwise restricted in this documentation, the maximum length of
any INF file field is 512 characters (including a terminating NULL character).

Note, however, that Plug and Play may impose a more restrictive limit
for certain INF file fields that it recognizes or uses, such as device description,
driver provider, and device manufacturer."

HTH
Andreas
MDGx
Petr,

All your "TargetWinxx=" directive tips checked out ok.
Many thanks.

Therefore I repacked these iexpress updates [same file sizes as old files]:
98KRNLUP.EXE = replaces both FEKRNLUP.EXE + SEKRNLUP.EXE
Q249824.EXE = replaces both F249824.EXE + old Q249824.EXE

* Unofficial Windows 98/98 SE KRNL386.EXE build 4.10.1999 Fix [172 KB, English]:
http://www.mdgx.com/files/98KRNLUP.EXE
This Fix may correct Kernel errors after installing Cursor + Icon Handling Fixes.

* Unofficial Windows 98/98 SE 255 Devices Additions + Removals Error VOLTRACK.VXD build 4.10.1999 Fix:
http://support.microsoft.com/?id=249824
Direct download [105 KB, English]:
http://www.mdgx.com/files/Q249824.EXE

Posted here:
http://www.mdgx.com/web.htm#98SE

I've tried them and they work properly with 98 SE and 98 FE.
Petr
Some additional observations reagrding iexpress SED files:

Extended syntax for Taget OS check:
CODE
TargetWin9xVersion=4.10.1999-4.10.2222:%OSWarn%:YesNo

%OSWarn% is text that is displayed
The last parameter may be OK, YesNo or OKCancel, it describes the behavior in case of error:
OK: just OK button is shown and install will not start.
OKCancel: Cancel is selected by default, OK will start the installation
YesNo: No is selected by default, Yes will start the installation

Example:
CODE
TargetWin9xVersion=4.10.2222:%OSWarn%:OK
[Strings]
OSWarn="This Service Pack is for Windows 98 Second Edition Only!"


The same can be used for TargetFileVersion. The syntax seems to be:
For one file:
CODE
TargetFileVersion=#A\IEXPLORE.EXE:4.72.3110.0:%BrowserWarn%:OK

For more files:
CODE
TargetFileVersion=@FileSectionList
[FileSectionList]
1=#S\BROWSEUI.DLL:5.0.3314.2100-5.0.3537.700:%BrowserWarn%:OK
2=#S\INSENG.DLL:5.0.3314.2101-5.0.3533.2600:%BrowserWarn%:OK
3=#S\MSHTML.DLL:5.0.3314.2100-5.0.3541.2700:%BrowserWarn%:OK
4=#S\MSRATING.DLL:5.0.3314.2100-5.0.3539.2200:%BrowserWarn%:OK
5=#S\PNGFILT.DLL:5.0.3314.2100-5.0.3541.2700:%BrowserWarn%:OK
6=#S\SHDOCVW.DLL:5.0.3314.2100-5.0.3537.700:%BrowserWarn%:OK
7=#S\SHLWAPI.DLL:5.0.3314.2100-5.0.3900.7033:%BrowserWarn%:OK
8=#S\URLMON.DLL:5.0.3314.2100-5.0.3537.700:%BrowserWarn%:OK
9=#S\WININET.DLL:5.0.3314.2100-5.0.3539.1800:%BrowserWarn%:OK

#W = %windir%
#S = %windir%\SYSTEM
#A = Application, full patch is checked
If not found, search is repeated with .DLL suffix added.

Two examples for SE SP:
CODE
TargetFileVersion=#A\IEXPLORE.EXE:6.0.2800.1106:%BrowserWarn%:OKCancel
[Strings]
BrowserWarn="Internet Explorer 6.0 SP1 should be installed before SESP!"


CODE
TargetFileVersion=#S\VERSION.DLL:4.90.0.3000:%MEWarn%:YesNo
[Strings]
MEWarn="98SE2ME seems to be installed, do you want to continue?"


Both may be combined.

Other possible directives in [Options] section, not used in SESP SED file:
PackageInstallSpace(KB)=10000 - self-explanatory
KeepCabinet=1 - do not delete the CAB file after package creation
MultiInstanceCheck=1 - not tested yet

CheckAdminRights=1 - probably for NT only
Here I don't know the purpose:
VersionInfo=VersionSection
[VersionSection]
ProductName=%ProductName%
and also not tested wher and how to use:
AppErrorCheck
AlwaysPropogateCmdExitCode
PropogateCmdExitCode
UpdateAdvDlls
PlatformDir

It seems I should really ask Microsoft if there is any detail specification of SED/CDF files.

And something about iexpress packages. They are created by adding resources to WEXTRACT.EXE, so any resource editor can be used check what the package contains and what it does. It can be used for checking unknown packages or testing if everyting is correct for newly built package before distributing.
The resource type is RCData and there are the following resources, some of them are optional:

ADMQCMD - AdminQuietInstCmd
CABINET - full cabinet file, generated by iexpress
EXTRACTOPT - HideExtractAnimation
FILESIZES - generated by iexpress
FINISHMSG - FinishMessage
INSTANCECHECK - MultiInstanceCheck
LICENSE - DisplayLicense
PACKINSTSPACE - PackageInstallSpace(KB)
POSTRUNPROGRAM - PostInstallCmd
REBOOT - RebootMode
RUNPROGRAM - AppLaunched
SHOWWINDOW - ShowInstallProgramWindow
TITLE - FriendlyName
UPROMPT - InstallPrompt
USRQCMD - UserQuietInstCmd
VERCHECK - TargetNTVersion, TargetWin9xVersion, TargetFileVersion

So any coder could easily write small utility that would re-create SED file from existing iexpress package and/or display all the settings.

Petr
MDGx
Petr, Gape, Tihiy + other developers, you might find this useful:

somebody made a small GUI tool [works with all Win9x/ME editions, even if it is meant for NTx] which converts REG files into INF files [GNU GPL open source]:
http://www.paraglidernc.com/12142.html
ConvRegToInf is designed specifically for Bart's PEBuilder tool [works only with NTx OSes]:
http://www.nu2.nu/pebuilder/
Download ConvRegToInf [11 KB]:
http://www.paraglidernc.com/plugins/ConvRegToInf02.zip
ConvRegToInf requires NFR 1.0 or newer already installed:
http://msdn.microsoft.com/netframework/dow...s/framework1_1/

ConvRegToInf's INF file HKXX [HKEY_XXX_XXX] Hive Keys entries are in hex code, eg:

0x1
0x2
0x3
0x4
etc

instead of MS default usage:

HKLM\Software
HKCU
HKU\.Default
HKCR
etc

Also, if using any REG_SZ [String Value], you need to modify the resulting INF file to add an extra comma [ , ] before "Value Data" to make it work properly:

ConvRegToInf outputs to:

CODE
0x1,"SubKey_Name","REG_SZ Value Name","Value Data"


needs to be modified to:

CODE
HKLM,"SubKey_Name","REG_SZ Value Name",,"Value Data"


I found ConvRegToInf very useful with huge REG files that need to be loaded in INF format.

If anybody cares to see an example of using ConvRegToInf, please d/l GRPHFLTS.EXE [1.65 MB, packed with iexpress]:
http://www.mdgx.com/files/GRPHFLTS.EXE
posted here:
http://www.mdgx.com/add.htm#PNT
Open the EXE in PowerArchiver or WinZip 9.xx:
http://www.mdgx.com/toy.htm#ZIP
extract GF.INF, then open GF.INF into Notepad and look under the [RF] section.
And if u wish to obtain my GF.REG file, please email me.

Hope this helps.
Petr
I've found the newest set of iexpress and other tools here:

http://download.microsoft.com/download/E/D...AEA77/mpedp.exe

There is also nice tool for displaying version numbers filever.exe, this is its output for all executables in this package:
CODE
W32i   DLL ENU   6.0.2900.2172 shp     99,840 06-17-2005 advpack.dll
W32i   APP ENU   5.1.2600.2172 shp     85,504 06-17-2005 makecab.exe
W32i   APP ENU   6.0.2900.2172 shp    114,688 06-17-2005 iexpress.exe
W32i   APP ENU   6.0.2900.2172 shp     65,536 06-17-2005 wextract.exe
W16    DLL ENU      4.71.704.0 shp      2,272 06-17-2005 w95inf16.dll
W32i   APP ENU       4.71.16.0 shp      4,608 06-17-2005 w95inf32.dll

W32i   APP   -     1.50.2421.1 shp     50,688 06-17-2005 msiinfo.exe
W32i   APP ENU      5.0.2195.1 shp     45,056 06-17-2005 uuidgen.exe
W32i     -   -               -   -     12,288 06-17-2005 wixgen.exe
W32i     -   -               -   -     53,248 06-17-2005 snapreg.exe
W32i     -   -               -   -    172,032 06-17-2005 mpedp.exe
W32i     -   -               -   -     12,656 06-17-2005 rebootchk.exe
W32i   APP ENU      5.0.2090.1 shp      4,880 06-17-2005 sleep.exe
W32i   APP ENU      5.2.3754.0 shp     14,336 06-17-2005 filever.exe
W32i   APP ENU      6.0.2600.0 shp    130,048 06-17-2005 nullvis.exe


Petr
Acheron
Windows XP SP2 contains already newer Iexpress by default.
Petr
QUOTE (hp38guser @ Jul 13 2005, 06:56 PM)
Windows XP SP2 contains already newer Iexpress by default.
*


You are right, I was confused by the date of all files....

And even newer version is in Server 2003 SP1 - 6.00.3790.1830 (srv03_sp1_rtm.050324-1447).

Unfortunately there is no changelog.

Petr
Petr
QUOTE (MDGx @ Jun 25 2005, 12:50 AM)
I'm wondering if anybody [except MS] has such info at all, I've also been searching the net, but unfortunately found nothing.
erpdude8 suggested I should email MS...
*


So I've got probably official information from Microsoft: Even in the Microsoft internal database, there is no idocumentation for IExpress.

Strange. The only possibility is to find the coder who writes IExpress then.

Petr
zachdms
QUOTE (Petr @ Jul 14 2005, 02:38 AM)
QUOTE (MDGx @ Jun 25 2005, 12:50 AM)
I'm wondering if anybody [except MS] has such info at all, I've also been searching the net, but unfortunately found nothing.
erpdude8 suggested I should email MS...
*


So I've got probably official information from Microsoft: Even in the Microsoft internal database, there is no idocumentation for IExpress.

Strange. The only possibility is to find the coder who writes IExpress then.

Petr
*

Who told you that?

What's the Question needing documentation?
erpdude8
QUOTE (eGo®Z @ Jun 25 2005, 05:19 PM) *
also very useful link thumbup.gif
http://perso.wanadoo.fr/tmcd2/


sorry eGo®Z. that link is now a dead one.

QUOTE (ack-hh @ Jun 27 2005, 12:41 PM) *
QUOTE (Petr @ Jun 27 2005, 02:55 AM)
Is there any known length limit?

from http://msdn.microsoft.com/library/en-us/in...fb2d300.xml.asp :
"INF Size Limits
A Windows 9x/Me INF file cannot be larger than 64 kilobytes.
There is no practical limit to the size of an INF file for NT-based systems.
Unless otherwise restricted in this documentation, the maximum length of
any INF file field is 512 characters (including a terminating NULL character).

Note, however, that Plug and Play may impose a more restrictive limit
for certain INF file fields that it recognizes or uses, such as device description,
driver provider, and device manufacturer."

HTH
Andreas


The MSDN link is now dead. New MSDN link to Creating INF files:
http://msdn.microsoft.com/library/default....fb2d300.xml.asp

BTW - how do the slayout.inf, slayout1.inf, slayout2.inf files from the 98se SP work? how are they created? I like to learn because I may be willing to update the 98FE SP2 pack just this one time. I may post up a beta of the 98fe SP2 since nobody seems to be doing anything about it right now.
Petr
QUOTE (erpdude8 @ Jun 22 2006, 09:36 PM) *
BTW - how do the slayout.inf, slayout1.inf, slayout2.inf files from the 98se SP work? how are they created? I like to learn because I may be willing to update the 98FE SP2 pack just this one time. I may post up a beta of the 98fe SP2 since nobody seems to be doing anything about it right now.


Originally they were built manually, then I wrote simple batch file for auto-generation of most of the necessary files.

I used the following .BAT file, I hope it is correct:
CODE
echo .Set CabinetNameTemplate=files\SP2.CAB >sp2.ddf
echo .Set Compress=on >>sp2.ddf
echo .Set CompressionType=LZX >>sp2.ddf
echo .Set CompressionLevel=7 >>sp2.ddf
echo .Set CompressionMemory=21 >>sp2.ddf
echo .Set RptFileName=SP2.RPT >>sp2.ddf
echo .Set MaxDiskSize=CDROM >>sp2.ddf
echo .Set ReservePerCabinetSize=0 >>sp2.ddf
echo .Set DiskDirectoryTemplate= >>sp2.ddf
echo .Set Cabinet=ON >>sp2.ddf
echo .Set MaxCabinetSize=999999999 >>sp2.ddf
echo .Set InfFileName=files\SLAYOUT1.INF >>sp2.ddf
echo .Set InfHeader= >>sp2.ddf
echo .Set InfDiskHeader=";Auto generated file - do not edit!" >>sp2.ddf
echo .Set InfDiskHeader1=[Version] >>sp2.ddf
echo .Set InfDiskHeader2=Signature="$CHICAGO$" >>sp2.ddf
echo .Set InfDiskHeader3=SetupClass=BASE >>sp2.ddf
echo .Set InfDiskLineFormat= >>sp2.ddf
echo .Set InfCabinetHeader=[SourceDisksNames] >>sp2.ddf
echo .Set InfCabinetLineFormat=*cab#*="Unofficial Service Pack for Windows 98 SE","SP2.CAB",0 >>sp2.ddf
echo .Set InfFileHeader= >>sp2.ddf
echo .Set InfFileHeader1=[SourceDisksFiles] >>sp2.ddf
echo .Set InfFileLineFormat=*file*=*cab#*,,*size*,*csum* >>sp2.ddf
echo .Set InfFooter= >>sp2.ddf
echo .Set SourceDir=files\sp2 >>sp2.ddf
echo. >>sp2.ddf
dir /b /on files\sp2\*.*  >>sp2.ddf

echo .Set CabinetNameTemplate=files\SUPP.CAB >SUPP.ddf
echo .Set Compress=on >>SUPP.ddf
echo .Set CompressionType=LZX >>SUPP.ddf
echo .Set CompressionLevel=7 >>SUPP.ddf
echo .Set CompressionMemory=21 >>SUPP.ddf
echo .Set RptFileName=SUPP.RPT >>SUPP.ddf
echo .Set MaxDiskSize=CDROM >>SUPP.ddf
echo .Set ReservePerCabinetSize=0 >>SUPP.ddf
echo .Set DiskDirectoryTemplate= >>SUPP.ddf
echo .Set Cabinet=ON >>SUPP.ddf
echo .Set MaxCabinetSize=999999999 >>SUPP.ddf
echo .Set InfFileName=files\SLAYOUT2.INF >>SUPP.ddf
echo .Set InfHeader= >>SUPP.ddf
echo .Set InfDiskHeader=";Auto generated file - do not edit!" >>SUPP.ddf
echo .Set InfDiskHeader1=[Version] >>SUPP.ddf
echo .Set InfDiskHeader2=Signature="$CHICAGO$" >>SUPP.ddf
echo .Set InfDiskHeader3=SetupClass=BASE >>SUPP.ddf
echo .Set InfDiskLineFormat= >>SUPP.ddf
echo .Set InfCabinetHeader=[SourceDisksNames] >>SUPP.ddf
echo .Set InfCabinetLineFormat=*cab#*="Unofficial Service Pack for Windows 98 SE","SUPP.CAB",0 >>SUPP.ddf
echo .Set InfFileHeader= >>SUPP.ddf
echo .Set InfFileHeader1=[SourceDisksFiles] >>SUPP.ddf
echo .Set InfFileLineFormat=*file*=*cab#*,,*size*,*csum* >>SUPP.ddf
echo .Set InfFooter= >>SUPP.ddf
echo .Set SourceDir=files\SUPP >>SUPP.ddf
echo. >>SUPP.ddf
dir /b /on files\SUPP\*.*  >>SUPP.ddf

"C:\Program Files\IEAK6\tools\makecab.exe"  /f sp2.ddf
"C:\Program Files\IEAK6\tools\makecab.exe"  /f supp.ddf

"C:\Program Files\IEAK6\tools\iexpress.exe" /n 21sesp.sed

del sp2.rpt
del supp.rpt
del sp2.ddf
del supp.ddf


and the following 21sesp.sed file:
CODE
[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=0
HideExtractAnimation=0
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=I
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
TargetWin9xVersion=4.10.2222
TargetNTVersion=0
MultiInstanceCheck=1
[Strings]
InstallPrompt=
DisplayLicense=files\LICENSE.TXT
FinishMessage=
TargetName=sesp211en.exe
FriendlyName=Windows98 SE SP 2.1.1 (English)
AppLaunched=INFEX.EXE
PostInstallCmd=<None>
AdminQuietInstCmd=SPUPDATE.INF
UserQuietInstCmd=SPUPDATE.INF
FILE0="WUINFO.INF"
FILE1="891711UN.INF"
FILE2="ASPI.INF"
FILE3="CRLUPD.EXE"
FILE4="DOSHERE.INF"
FILE5="GETVER.EXE"
FILE6="INFEX.EXE"
FILE7="INFEX.INI"
FILE8="INSTMSIA.EXE"
FILE9="LICENSE.TXT"
FILE10="LOGO.INF"
FILE11="NOTEPAD.INF"
FILE12="PRESERVE.INF"
FILE13="Q329414.EXE"
FILE14="ROOTSUPD.EXE"
FILE15="RUNPOST.BAT"
FILE16="SCR56.INF"
FILE17="SHELL.INF"
FILE18="SHELLRB.BAT"
FILE19="SHELLRB.INF"
FILE20="SLAYOUT1.INF"
FILE21="SLAYOUT2.INF"
FILE22="SLEEK.INF"
FILE23="SP2.CAB"
FILE24="SPUNINST.INF"
FILE25="SPUPDATE.INF"
FILE26="SUPP.CAB"
FILE27="TWEAKS.INF"
FILE28="TWEAKUI.CNT"
FILE29="TWEAKUI.CPL"
FILE30="TWEAKUI.HLP"
FILE31="TWEAKUI.INF"
FILE32="W2KCOLOR.INF"
FILE33="WBEM15UP.INF"
[SourceFiles]
SourceFiles0=files\
[SourceFiles0]
%FILE0%=
%FILE1%=
%FILE2%=
%FILE3%=
%FILE4%=
%FILE5%=
%FILE6%=
%FILE7%=
%FILE8%=
%FILE9%=
%FILE10%=
%FILE11%=
%FILE12%=
%FILE13%=
%FILE14%=
%FILE15%=
%FILE16%=
%FILE17%=
%FILE18%=
%FILE19%=
%FILE20%=
%FILE21%=
%FILE22%=
%FILE23%=
%FILE24%=
%FILE25%=
%FILE26%=
%FILE27%=
%FILE28%=
%FILE29%=
%FILE30%=
%FILE31%=
%FILE32%=
%FILE33%=


The required directory structure is as follows:
top level - just these two files (and later the generated file is here too)
1st level subdirectory: "files" contains complete unpacked service pack (with or without the following files, they are generated automatically or not required: sp2.cab, supp.cab, slayout1.inf, slayout2.inf, advpack.dll, W95inf16.dll, W95inf32.dll)
2nd level subdirectory (inside the "files" directory): There are two directories, sp2 and supp, containing files belonging to sp2.cab and supp.cab respectively.

How it works? The .bat file does the following tasks:
1. create sp2.ddf and supp.ddf files
2. makecab will use these files to create slayout1.inf, slayout2.inf, sp2.cab and supp.cab
3. iexpress will package everything together to the final package
4. all temporary files are deleted.

Maybe it is nice solution - but it wors, and is not dependent on the location of the root directory.

I hope it is correct - I did it more than half year ago.

Petr
the_guy
@Petr,

that is the batch file I use for the ME SP. It works fine for me.

the_guy
erpdude8
QUOTE (the_guy @ Jun 22 2006, 04:23 PM) *
@Petr,

that is the batch file I use for the ME SP. It works fine for me.

the_guy


thanks Petr & the_guy.

BTW - the_guy, the link to ME Service Pack 2 beta 3 is now dead. Are you almost ready to post up beta 4 of ME SP?
erpdude8
QUOTE (Petr @ Jun 26 2005, 12:12 PM) *
And just to add how it appears to be with the TargetFileVersion directive:
Example is:
TargetFileVersion=#A\IEXPLORE.EXE:4.70.0.1155-:%BrowserWarn%ohmy.gifK

#A means probably application
#S means system file (located in %windir%\system)
Maybe ther are other possibilities, I don't know.

For version number(s) it the same as for TargetWin9xVersion, but versipn has 4 parts, i.e. it can look like:
TargetFileVersion=#A\APPLICATION.EXE:1.2.3.4-3.4.5.6,5.6.7.8-6.7.8.9:%AppWarning%ohmy.gifK

I'm still not sure what means the "OK" at the end and what are other possibilities.

BTW, some coder could write very simple tool that would just show the required OS version and FileVersion for given iexpress package.
FileVersions are coded as 4 words (8 bytes total) is the following sequence: For version a.b.c.d the order in the file is b,a,d,c,, no limit = FFFFFFFF
OSVersions are coded as 3 doublewords (12 bytes total) ordered naturally, no limit is FFFFFFFFFFFF.

Petr


and what will happen when %BrowserWarn% or %AppWarning% is used? What kind of message will %BrowserWarn% or %AppWarning% be displayed if you have defined one?

-erpdude
Petr
QUOTE (erpdude8 @ Jun 28 2006, 07:54 PM) *
and what will happen when %BrowserWarn% or %AppWarning% is used? What kind of message will %BrowserWarn% or %AppWarning% be displayed if you have defined one?

-erpdude


It will display what you will define.

This is an example taken from some older IE 5.01 update:

CODE
TargetWin9xVersion=4.10.1998-:%OSWarn%:OK
TargetNTVersion=0:%OSWarn%:OK
TargetFileVersion=@FileSectionList

[FileSectionList]
1=#S\BROWSEUI.DLL:5.0.3314.2100-5.0.3537.700:%BrowserWarn%:OKCancel
2=#S\INSENG.DLL:5.0.3314.2101-5.0.3533.2600:%BrowserWarn%:OKCancel
3=#S\MSHTML.DLL:5.0.3314.2100-5.0.3541.2700:%BrowserWarn%:OK
4=#S\MSRATING.DLL:5.0.3314.2100-5.0.3539.2200:%BrowserWarn%:OK
5=#S\PNGFILT.DLL:5.0.3314.2100-5.0.3541.2700:%BrowserWarn%:OK
6=#S\SHDOCVW.DLL:5.0.3314.2100-5.0.3537.700:%BrowserWarn%:OK
7=#S\SHLWAPI.DLL:5.0.3314.2100-5.0.3900.7033:%BrowserWarn%:OK
8=#S\URLMON.DLL:5.0.3314.2100-5.0.3537.700:%BrowserWarn%:OK
9=#S\WININET.DLL:5.0.3314.2100-5.0.3539.1800:%BrowserWarn%:OK

[Strings]
OSWarn=The version of Windows you have installed does not match the update you are trying to install.
BrowserWarn=The version of Internet Explorer you have installed does not match the update you are trying to install.


In this example if you will try to install the package on any Windows 9x with lower version number than 4.10.1998 (i.e. Windows 95", you will receive "The version of Windows you have installed does not match the update you are trying to install." error message. If you will try to install this package on a system that contains wrong version of the a.m. files then you will receive "The version of Internet Explorer you have installed does not match the update you are trying to install." error message.

Is this explanation sufficient?

Petr
MDGx
I have uploaded the INF + Iexpress guide here:
http://www.mdgx.com/INF_web/
If you prefer to read the INF + IEXPRESS guide offline, download the ZIP, unZIP it + open index.htm in your favorite web browser [HTML Format, 378 KB, English]:
http://www.mdgx.com/INF_web/INF_WEB.ZIP

Linked from here:
http://www.mdgx.com/add.htm#INF

HTH
erpdude8
QUOTE (Petr @ Jun 26 2005, 10:23 AM) *
Commonly used version ranges by Microsoft:
TargetWin9xVersion=4.0.950-4.0.1212 - Windows 95
TargetWin9xVersion=4.10.1998-4.10.2222 - Windows 98
TargetWin9xVersion=4.90.3000 - Windows ME

the same for TargetNTVersion

Is anybody able to test it?

Petr


I wouldnt use that kind of TargetWin9xVersion setting for Windows 95. That may not work for Win95 B/C systems with the USB Supplement Update installed which updates Win95 OSR2 to either version 4.03.1212 or 4.03.1214.

personally I prefer 'TargetWin9xVersion=4.00.950-4.03.1214' when making patches for Win95

see MS KB article 158238 on the 9x versions of Windows being used:
http://support.microsoft.com/kb/158238

thanks MDGx for posting up the INF + IExpress guide.
erpdude8
some of the stuff written in MS article 197147 about Command-line switches for IExpress packages is incorrect. For example the /r:s switch, which supposed to make the package restart the computer without asking the user after install, does NOT really restart the computer automatically. Reading the INF + IExpress web guide about the 'Smart Reboot' switches, it's actually 'AS' [or /r:as]. If you want to force and IExpress package like any Win98 hotfix to automatically restart the computer specify the /r:as switch (or even the /r:is switch if the files that are being updated are in use by the Windows OS).
erpdude8
QUOTE (hp38guser @ Jul 13 2005, 11:56 AM) *
Windows XP SP2 contains already newer Iexpress by default.


Windows Server 2003 SP1 contains even NEWER IExpress.exe file than in XP SP2. WinServ2k3 SP1 has 6.00.3790.1830. Too bad M$ did not include updated makecab.exe and wextract.exe files in Service Pack 1 of Windows Server 2003.
Petr
QUOTE (erpdude8 @ Jul 24 2006, 05:23 PM) *
Windows Server 2003 SP1 contains even NEWER IExpress.exe file than in XP SP2. WinServ2k3 SP1 has 6.00.3790.1830. Too bad M$ did not include updated makecab.exe and wextract.exe files in Service Pack 1 of Windows Server 2003.

Windows Server 2003 SP2 (beta) contains even NEWER IExpress.exe - 6.00.3790.2725. Again no updated makecab.exe and wextract.exe files.

Petr
erpdude8
QUOTE (Petr @ Jul 24 2006, 11:15 AM) *
QUOTE (erpdude8 @ Jul 24 2006, 05:23 PM) *

Windows Server 2003 SP1 contains even NEWER IExpress.exe file than in XP SP2. WinServ2k3 SP1 has 6.00.3790.1830. Too bad M$ did not include updated makecab.exe and wextract.exe files in Service Pack 1 of Windows Server 2003.

Windows Server 2003 SP2 (beta) contains even NEWER IExpress.exe - 6.00.3790.2725. Again no updated makecab.exe and wextract.exe files.

Petr


that sucks doesnt it Petr for MS not to include updated makecab.exe and wextract.exe files? I think Win2003 SP2 may come out either late this year or early next year. There will be an XP SP3 sometime in 2007. MS definitely needs to address the date problems when creating CAB or self-extracting CAB files with the Windows Server 2003 version of makecab.exe.
Petr
QUOTE (erpdude8 @ Jul 24 2006, 10:12 PM) *
that sucks doesnt it Petr for MS not to include updated makecab.exe and wextract.exe files? I think Win2003 SP2 may come out either late this year or early next year. There will be an XP SP3 sometime in 2007. MS definitely needs to address the date problems when creating CAB or self-extracting CAB files with the Windows Server 2003 version of makecab.exe.


BTW, makecab.exe 6.0.5384.4 (from Windows Vista beta 2) works correctly on Windows XP and uses correctly the "modified" date, not "created" as version 5.1.2600.2180.

Petr
Camarade_Tux
@Petr, good news. smile.gif

Do you know if makecab is now threaded ?
It would be really pleasant. woot.gif
erpdude8
QUOTE (Petr @ Jul 24 2006, 04:03 PM) *
BTW, makecab.exe 6.0.5384.4 (from Windows Vista beta 2) works correctly on Windows XP and uses correctly the "modified" date, not "created" as version 5.1.2600.2180.

Petr


is wextract.exe also included in Windows Vista?
Petr
QUOTE (erpdude8 @ Jul 26 2006, 07:26 PM) *
is wextract.exe also included in Windows Vista?


Yes, it is.

Petr
erpdude8
what version of wextract.exe is included in the latest beta of Windows Vista?
Petr
QUOTE (erpdude8 @ Sep 1 2006, 05:44 PM) *
what version of wextract.exe is included in the latest beta of Windows Vista?

Vista pre-rc1 build 5552 contains version 6.0.5552.16384

Petr
Petr
QUOTE (Petr @ Sep 1 2006, 07:10 PM) *
QUOTE (erpdude8 @ Sep 1 2006, 05:44 PM) *

what version of wextract.exe is included in the latest beta of Windows Vista?

Vista pre-rc1 build 5552 contains version 6.0.5552.16384

Vista rc1 build 5600 contains version 6.0.5600.16384 (vista_rc1.060829-2230)

I have uploaded iexpress/wextract/makecab/advpack from vista rc1 here: http://home.tiscali.cz/~cz053010/iexpress-5600.zip

Petr
Petr
QUOTE (erpdude8 @ Jun 29 2006, 07:54 PM) *
QUOTE (Petr @ Jun 26 2005, 10:23 AM) *


Commonly used version ranges by Microsoft:
TargetWin9xVersion=4.0.950-4.0.1212 - Windows 95
TargetWin9xVersion=4.10.1998-4.10.2222 - Windows 98
TargetWin9xVersion=4.90.3000 - Windows ME


I wouldnt use that kind of TargetWin9xVersion setting for Windows 95. That may not work for Win95 B/C systems with the USB Supplement Update installed which updates Win95 OSR2 to either version 4.03.1212 or 4.03.1214.

personally I prefer 'TargetWin9xVersion=4.00.950-4.03.1214' when making patches for Win95

see MS KB article 158238 on the 9x versions of Windows being used:
http://support.microsoft.com/kb/158238


Versions reported to iexpress package (wextract stub):
Windows 95 retail, OEM and OSR1: 4.00.950
Windows 95 OSR2, OSR2.1 and OSR2.5 without USB supplement: 4.00.1111
Windows 95 OSR2.1 and OSR2.5 with USB supplement: 4.00.1212

So TargetWin9xVersion=4.0.950-4.0.1212 is sufficient to cover all Windows 95 versions and old Microsoft packages contain this range. Newer packages from Microsoft contain wider range 4.00.950-4.03.1214 but this seems to be unnecessary.

MSKB article 158238 does not provide correct information. For example, the version displayed on the System Properties General tab is different:
Windows 95 retail and OEM: 4.00.950
Windows 95 retail with SP1 and OSR1: 4.00.950a (not 4.00.950A)
Windows 95 OSR2 and OSR2.1: 4.00.950 B (not 4.00.950B)
Windows 95 OSR2.5: 4.00.950 C (not 4.00.950C) (after uninstalling USB supplement is changed to 4.00.950 b)

Version stored in registry in HKLM\Software\Microsoft\Windows\CurrentVersion, keys VersionNumber and SubVersionNumber:
Windows 95 retail and OEM: 4.00.950
Windows 95 retail with SP1 and OSR1: 4.00.950a
Windows 95 OSR2 and OSR2.1 without USB supplement: 4.00.1111 B
Windows 95 OSR2.1 with USB supplement: 4.03.1212 B or 4.03.1214 B
Windows 95 OSR2.5 without USB supplement: 4.00.1111 C
Windows 95 OSR2.5 with USB supplement: 4.03.1214 C
Windows 95 OSR2.5 after uninstalling USB supplement: 4.00.1111 b
Note: There are two versions of USB supplement USBSUPP.EXE, 4.03.1212 and 4.03.1214. In all versions of OSR 2.1 and OSR 2.5 seems to be USBSUPP.EXE 4.03.1214 only, KB181661 lists 4.03.1214 version too, USBSUPP.EXE 4.03.1212 I have found here only: http://www.usbman.com/WebDrivers/Win95USB%...ate/usbsupp.zip

DOS command VER reports 4.00.950 for retail/SP1/OEM/OSR1 and 4.00.1111 for OSR2.x.

Windows command WINVER reports just "Windows 95" for all sub-versions.
sepehrst
Hi EveryOne

I have discovered many hidden SED file directives several years ago
I think this is a good place to share it

I suggest you to complete it or provide more descriptions about directives if you know something.

Here it is...


Template.sed

[Version]
;Class=IEXPRESS
;SEDVersion=3
;CDFVersion=3



[Options]
;AppErrorCheck=
;AlwaysPropogateCmdExitCode=
;PropogateCmdExitCode=
;PlatformDir=
;PackagePurpose=InstallApp CreateCab ExtractOnly
;ShowInstallProgramWindow=0
;Quantum=
;CompressionType=NONE QUANTUM MSZIP LZX
;CompressionMemory=15-21
;CompressionLevel=1-7
;MultiInstanceCheck=P or B,"Cookie String" P = Prompt , B = Block
;HideExtractAnimation=0
;UseLongFileName=0
;UpdateAdvDlls=1
;PackageInstallSpace(KB)=
;Compress=OFF
;KeepCabinet=1
;RebootMode=I
;InstallPrompt=%InstallPrompt%
;DisplayLicense=%DisplayLicense%
;FinishMessage=%FinishMessage%
;TargetName=%TargetName%
;FriendlyName=%FriendlyName%
;AppLaunched=%AppLaunched%
;PostInstallCmd=%PostInstallCmd%
;AdminQuietInstCmd=%AdminQuietInstCmd%
;UserQuietInstCmd=%UserQuietInstCmd%
;SourceMediaLabel=
;IEXP_LayoutINF=
;SourceFiles=SourceFiles
;CheckAdminRights=1
;TargetNTVersion=%VersionRange%:%Prompt%:ok OkCancel YesNo
;TargetWin9xVersion=4.10.1998-4.10.2222:%Prompt%:ok OkCancel YesNo
;TargetFileVersion=@FileVersionSection
;InsideCompressed=0
;CAB_FixedSize=0
;CAB_ResvCodeSigning=0,2048,4096,6144
;PackageForX86=
;VersionInfo=VersionSection
;ExtractorStub=


[FileVersionSection]
;1=#S\%File%:%VersionRange%:%Prompt%:ok OkCancel YesNo
;2=#W\
;3=#A\
; #S System Directory
; #W Windows Directory
; #A I guess Application Directory (not sure)


[VersionSection]
;FileDescription=
;CompanyName=
;FileVersion=
;ProductVersion=
;OriginalFilename=
;LegalCopyright=
;ProductName=
;InternalName=
;FromFile= Reads Version info Resouce from Specified PE file


[Strings]
;AdminQuietInstCmd=
;UserQuietInstCmd=
;FILE0=


[SourceFiles]
;SourceFiles0=%Path%
;SourceFiles1=


[SourceFiles0]
;%FILE0%=
;%FILE1%=


;Notes:
;Passing #e and #d parameters to the install command,
;will be converted to <full path> and <directory path>
;of the extractor package respectively.
; It is safer to pass "#e" or "#d" instead of #e or #d
erpdude8
MDGx, I have noticed recently that some of the unofficial patches for Win9xME have been created or revised from version 6.00.2800.1168 of wextract.exe. where can this specific version be found?
erpdude8
QUOTE (MDGx @ Jul 7 2005, 03:03 AM) *
Petr, Gape, Tihiy + other developers, you might find this useful:

somebody made a small GUI tool [works with all Win9x/ME editions, even if it is meant for NTx] which converts REG files into INF files [GNU GPL open source]:
http://www.paraglidernc.com/12142.html
ConvRegToInf is designed specifically for Bart's PEBuilder tool [works only with NTx OSes]:
http://www.nu2.nu/pebuilder/
Download ConvRegToInf [11 KB]:
http://www.paraglidernc.com/plugins/ConvRegToInf02.zip
ConvRegToInf requires NFR 1.0 or newer already installed:
http://msdn.microsoft.com/netframework/dow...s/framework1_1/


The INF-Tool found at the following site can also convert REG files into INF files AND does NOT require .NET Framework and can work under Win9xME and WinNTx OSes.
http://www.inner-smile.com/dl_inf.htm
the "lite" version of INF-Tool is free for personal use
MDGx
QUOTE (erpdude8 @ Oct 11 2006, 10:54 AM)
MDGx, I have noticed recently that some of the unofficial patches for Win9xME have been created or revised from version 6.00.2800.1168 of wextract.exe. where can this specific version be found?
Petr posted it here:
http://www.msfn.org/board/?s=&showtopi...st&p=560359

Thanks for the INF-tool.
Petr
I'm trying to understand how combined updates work, i.e. one packege for 98 Gold + 98 SE, or one package for 95 Gold, 95 OSR2 and 95 OSR 2.x but I'm lost a bit.

An example for Windows 95. The controlling 175086up.inf executed by the WEXTRACT contains:
CODE
[DefaultInstall]
RunPreSetupCommands    = Win95.Ver.Check, OSR2.Ver.Check, OSR21.Ver.Check

[Win95.Ver.Check]
"rundll32 advpack.dll,LaunchINFSection 95G_chk.inf,DefaultInstall,2,N"

[OSR2.Ver.Check]
"rundll32 advpack.dll,LaunchINFSection OSR2_chk.inf,DefaultInstall,2,N"

[OSR21.Ver.Check]
"rundll32 advpack.dll,LaunchINFSection OSR21chk.inf,DefaultInstall,2,N"


What mean "2,N" flags here? http://msdn.microsoft.com/workshop/deliver...hinfsection.asp seems not to describe them.

But OK, in general it means that all three infs (95G_chk.inf, OSR2_chk.inf, OSR21chk.inf) are executed.

What they contain interesting: 95G_chk.inf
CODE
[DefaultInstall]
CustomDestination    = 95GonlyDestination

[95GonlyDestination]
49000 = W95GonlyReg, 54

[W95GonlyReg]
"HKLM",%Osr2Key%,%Osr2Val%,"",""
"","","","",""

[Strings]
Osr2Key         = "SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\OptionalComponents"
Osr2Val         = "DeskMgmt"

Osr2_chk.inf contains:
CODE
[DefaultInstall]
CustomDestination    = OSR2onlyDestination

[OSR2onlyDestination]
49001 = OSR2XonlyReg, 22
49002 = OSR2onlyReg, 54

[OSR2XonlyReg]
"HKLM",%Osr2Key%,%Osr2Val%,"",""
"","","","",""

[OSR2onlyReg]
"HKLM",%Osr21Key%,%Osr21Val%,"",""
"","","","",""

[Strings]
Osr2Key         = "SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\OptionalComponents"
Osr2Val         = "DeskMgmt"
OSR21Key         = "System\CurrentControlSet\Services\VxD\NTKern"
OSR21Val         = "StaticVxD"

and Osr21chk.inf contains:
CODE
[DefaultInstall]
CustomDestination    = OSR21onlyDestination

[OSR21onlyDestination]
49001 = OSR2XonlyReg, 22
49003 = OSR21onlyReg, 22

[OSR2XonlyReg]
"HKLM",%Osr2Key%,%Osr2Val%,"",""
"","","","",""

[OSR21onlyReg]
"HKLM",%Osr21Key%,%Osr21Val%,"",""
"","","","",""

[Strings]
Osr2Key         = "SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\OptionalComponents"
Osr2Val         = "DeskMgmt"
OSR21Key         = "System\CurrentControlSet\Services\VxD\NTKern"
OSR21Val         = "StaticVxD"


And for Windows 98 (256015 as an example): 256015up.inf contains
CODE
[DefaultInstall]
RunPreSetupCommands    = G.Ver.Check
RunPostSetupCommands    = SE.Ver.Check

[G.Ver.Check]
"rundll32 advpack.dll,LaunchINFSection 98G_chk.inf,DefaultInstall,2,N"

[SE.Ver.Check]
"rundll32 advpack.dll,LaunchINFSection 98SE_chk.inf,DefaultInstall,2,N"
so again both INFs are executed.
98G_chk.inf contains:
CODE
[DefaultInstall]
CustomDestination    = 98SEonlyDestination

[98SEonlyDestination]
49000 = W98SEonlyReg, 50

[W98SEonlyReg]
"HKLM",%98SEKey%,%98SEVal1%,"",""
"","","","",""

[Strings]
98SEKey            = "Software\Microsoft\Windows\CurrentVersion\Setup\OptionalComponents"
98SEVal1        = "ICS"


98SE_chk.inf contains:
CODE
[DefaultInstall]
CustomDestination    = 98SEonlyDestination

[98SEonlyDestination]
49000 = W98SEonlyReg, 22

[W98SEonlyReg]
"HKLM",%98SEKey%,%98SEVal1%,"",""
"","","","",""

[Strings]
98SEKey            = "Software\Microsoft\Windows\CurrentVersion\Setup\OptionalComponents"
98SEVal1        = "ICS"


Apparently the logic is:
For Windows 95, if value DeskMgmt does not exist, it is Windows 95 Gold (4.00.950), if it exists, but StaticVxD does not exist, it is OSR2 (4.00.1111) and if StaticVxD exists, it is OSR2 with USB supplement, i.e. OSR2.1 or OSR2.5 (4.00.1212 or 4.03.1214).
For Windows 98, if value ICS does not exist, it is Windows 98 Gold (4.10.1998), if it exists, it is Second Edition (4.10.2222).

The only information I was able to find for meaning of the number at the end of the lines in Destionation sections is here: http://www.mdgx.com/INF_web/custdest.htm but there is just
1=prompt user
5=no prompt
but what means 22, 50 and 54?

And how this exactly works?

BTW, is there any way how to force (ADVPACK?) to create the installation log? Something like is visible here for wmp11: http://forums.techarena.in/showthread.php?t=513853

Petr
ale5000
Is it possible check when the program is already installed (to prevent double installation) for example to stop setup if a file already exist or if registry key already exist?
erpdude8
QUOTE (Petr @ Oct 20 2006, 05:43 PM) *
BTW, is there any way how to force (ADVPACK?) to create the installation log? Something like is visible here for wmp11: http://forums.techarena.in/showthread.php?t=513853

Petr


not sure. I know under my WinME computer, it creates or appends the AdvpackExt.log and setupapi.log files in the WINDOWS folder when running or using the ADVPACK.DLL file. I'm not sure how "advpack logging" is enabled under ME.
ale5000
There is a way to check from the setup or from the inf file if a registry key already exist?
ShadeTreeLee
QUOTE (Petr @ Oct 20 2006, 03:43 PM) *
BTW, is there any way how to force (ADVPACK?) to create the installation log? Something like is visible here for wmp11: http://forums.techarena.in/showthread.php?t=513853

Petr


I don't know where I picked this up at but if you will merge the following reg file it will turn on Advpack logging in Win98se. The log file itself will land in the Windows folder the next time advpack.dll is used. The file gets appended to each time, so eventually can grow quite big.

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Advanced INF Setup]
"AdvpackLogFile"="AdvPack.log"

The same type of thing gets done with SetupAPI.log file if one substitutes ME's setupapi.dll for win98's. I didn't notice that any registry entries had any effect, but they may well as per NT5's verbosity settings. I really need to see what the ME registry shows in the following location or thereabouts:
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup]
"LogLevel"=dword:2000ffff
The above value was suggested by an MS document on the verbosity settings for setupAPI.log, if the key/value doesn't exist in ME then I guess I really don't need it after all with my 98se?

---------------------
Question on Custom Destination flags is somewhat answered in WillPad's help file with a 34 flag example where a Path key is set and then if the installation package has run again the second attempt is aborted which answers in a round about manner another question in this very thread. Trouble is WillyPad help file is not very clear at times like this one, nor is this section complete as to all possible flag uses.
WillyPad

---------------------
2,N flags for invoked advpack.dll are obscure at best. So I loaded advpack.dll using Dependency walker, then highlighted LaunchINFSectionEx, then right clicked something IIRC and a web search at msdm occured which got some of this text: NOTE that the 2 flag is still not described by MS at this detailed level!!!

LaunchINFSectionEx Function Internet Development Index


Launches a section of an information (INF) file.

Syntax

HRESULT WINAPI LaunchINFSectionEx( HWND hwnd,
HINSTANCE hInst,
PSTR pszParams,
INT nShow
);
Parameters

hwnd
HWND that specifies the owner window on which to display error messages. This parameter is typically NULL, which causes the Desktop to be the owner window.

hInst
Handle to the instance of the program. This parameter is typically NULL.

pszParams
Comma-delimited string that specifies the INF file, the section of the INF file to launch, the fully qualified path of the cabinet file (CAB) that contains the INF file, and the flags that specify the installation mode, in that order. If you do not specify the fully qualified path of the INF file, the INF file is extracted from the specified CAB file. If you do not specify a section, that is, if the section portion of the pszParams string is an empty string or is set to NULL, then the DefaultInstall section of the INF file is launched. The following flags are used to specify the installation mode.
4 Quiet mode, no UI
8 Don't run GrpConv
16 Force self-updating on user's system
32 Backup data before install
64 Rollback to previous state
128 Validate the backup data
256 Complete rollback to previous state
512 Force delay of OCX registration

nShow
Variable of type INT that specifies whether to reboot the user's machine upon completion. Can be one of the following values.
A
Always reboot.
I
Default. Reboot if needed.
N
No reboot.

Return Value
Returns one of the following values.

S_OK The section launched successfully.
E_FAIL The section failed to launch.


Remarks

You can call this function using Rundll32.exe from the command line.

Note Using an entry point function with Rundll32.exe does not resemble a normal function call. The function name and the name of the .dll file where it is stored are used only as command line parameters. The function definition shown in the Syntax section of this topic is only a standard prototype for all functions that you can call using Rundll32. The specific values for hwnd and hInst are not provided by the user, but are handled behind the scenes by Rundll32.
Examples

The following examples demonstrate how to call the LaunchINFSectionEx function using Rundll32.
This example demonstrates how to extract the myinf.inf INF file from the c:\temp\mydata.cab CAB file in Quiet|Backup mode, and reboot if needed.

rundll32.exe advpack.dll,LaunchINFSectionEx myinf.inf,,c:\temp\mydata.cab,36
This example demonstrates how to roll back to the state before the myinf.inf INF file was installed.

rundll32.exe advpack.dll,LaunchINFSectionEx c:\windows\inf\myinf.inf,,,256,a
Function Information

Stock Implementation advpack.dll
Custom Implementation No
Import library None
Minimum availability Internet Explorer 5.01
Minimum operating systems Windows 2000

See Also

About INF File Architecture, Using INF Files

----------------------
As to how combined updates work - your guess is much better than mine and even sounds plausible. But for most of them, I seem to recall there being also custom executables in the package(s) which might do just about what ever they want as far as OS testing and running of named inf files go, so I never bothered to put much brain time onto the problem.
erpdude8
QUOTE (ale5000 @ Dec 22 2006, 09:59 PM) *
There is a way to check from the setup or from the inf file if a registry key already exist?


I think there is, ale5000. but nobody has figured that out yet.

i know the Q329048 security update [329048usa8.exe] for Win98/Plus 98 has to check for a certain Plus 98 registry entry for it to install files from the Q329048 update.

anyone care to look at the coding of the Win98 Q329048 patch?
soporific
QUOTE (ale5000 @ Dec 17 2006, 12:58 AM) *
Is it possible check when the program is already installed (to prevent double installation) for example to stop setup if a file already exist or if registry key already exist?

I was searching this thread for the answer to this *exact* question ... any clues, ideas, links, complete answers handed on a platter?
eidenk
It's certainly possible to do registry checks from batch files. Maybe the following code will give you some idea. A batch file I had made (using Tfind.com) for toggling view extensions in explorer. (Superceded since a long time by Spiritpyre's toggle extension executable)

CODE
@echo off
regedit /e Get.txt "HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
TFIND /e "HideFileExt" "dword:00000001" GET.txt > RESULT.TXT
IF ERRORLEVEL   1 GOTO :ERROR1
IF ERRORLEVEL   0 GOTO :ERROR0
:ERROR1
Regedit /s Show.reg
GOTO :END
:ERROR0
Regedit /s Hide.reg
GOTO :END
:END
Del *.txt
cls


For file version check, I guess it is certainly possible to use a command line tool for extracting file versions and use it along a similar line.

Maybe Verinfo : ftp://ftp.sac.sk/pub/sac/utilprog/vrinf100.zip

Edit : Oops I just see that I have been off-topic as this is the thread about inf files.
Google Internet Forums Unattended CD/DVD Guide
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.