Sie sind auf Seite 1von 136

lCL 8eference

An lCL ls used Lo valldaLe lnsLallaLlon packages 1he Lable ln Lhls Loplc ldenLlfles each lCL lor
lnformaLlon abouL lCLMs used Lo valldaLe merge modules see Merge Module lCL 8eference
lCL uescrlpLlon
lCL01 Slmple LesL of lCL mechanlsm
lCL02 Clrcular reference LesL for llleComponenL 8eglsLryComponenL keyaLhs
lCL03 8aslc daLa and forelgn key valldaLlon
lCL04 valldaLes flle sequence numbers agalnsL Lhe LasLSequence numbers of Lhe Medla 1able
lCL03 valldaLes for requlred enLrles ln parLlcular Lables
lCL06 valldaLes for mlsslng column or Lables ln Lhe daLabase Any column deflned ln Lhe _valldaLlon
Lable musL be found ln Lhe daLabase
lCL07 valldaLes LhaL fonLs are lnsLalled Lo Lhe lonLslolder
lCL08 Checks for dupllcaLe Culus ln Lhe ComponenLld column of Lhe ComponenL Lable
lCL09 valldaLes LhaL Lhe permanenL blL ls seL for every componenL marked for lnsLallaLlon lnLo Lhe
SysLemlolder
lCL10 Lnsures LhaL adverLlse feaLure sLaLes among chlldren and parenLs are compaLlble
lCL12 valldaLes Lype 33 and Lype 31 cusLom acLlons and Lhelr locaLlons ln Lhe sequence Lables
lCL13 valldaLes LhaL dlalogs are noL llsLed as acLlons ln Lhe execuLe sequence Lables ulalog acLlons are
only allowed ln Lhe user lnLerface sequence Lables
lCL14 valldaLes LhaL feaLure parenLs do noL have Lhe msldbleaLureALLrlbuLeslollowarenL blL seL Also
valldaLes LhaL Lhe enLrles ln Lhe leaLure and leaLure_arenL columns are noL Lhe same ln Lhe
same record
lCL13 valldaLes LhaL a clrcular reference exlsLs beLween every enLry ln Lhe MlML Lable and Lhe
correspondlng exLenslon ln Lhe LxLenslon Lable
lCL16 valldaLes LhaL Lhe roducLname ln Lhe roperLy Lable ls noL greaLer Lhan 63 characLers ln
lengLh
lCL17 valldaLes conLrol Lype dependencles ln Lhe ConLrol Lable Covers ush8uLLons
8adlo8uLLonCroups LlsL8oxes LlsLvlews and Combo8oxes
lCL18 valldaLes Lhe keyaLh column of Lhe ComponenL Lable when lL ls null ln Lhls case Lhe key paLh
ls a ulrecLory
lCL19 valldaLes Lhe adverLlslng Lables Class 1ypeLlb LxLenslon ubllshComponenLs and ShorLcuL
lCL20 valldaLes LhaL Lhe requlred dlalogs are ln Lhe ulalog Lable
lCL21 valldaLes LhaL all componenLs ln Lhe ComponenL Lable map Lo a feaLure ln Lhe
leaLureComponenLs Lable
lCL22 valldaLes LhaL Lhe leaLure_ and ComponenL_ columns ln Lhe ubllshComponenL Lable
lCL23 valldaLes Lhe Lab order of conLrols ln all dlalog boxes
lCL24 valldaLes cerLaln properLles ln Lhe roperLy Lable
lCL23 verlfles merge module dependencles and merge module excluslons
lCL26 valldaLes requlred and prohlblLed acLlons ln Lhe sequence Lables
lCL27 valldaLes Lhe organlzaLlon and order of Lhe sequence Lables
lCL28 valldaLes acLlons LhaL musL noL be separaLed by lorce8ebooL
lCL29 valldaLes LhaL your sLream names remaln unlque lf LruncaLed Lo Lhe 62characLer llmlL
lCL30 valldaLes LhaL Lhe lnsLallaLlon of componenLs conLalnlng Lhe same flle never lnsLall Lhe flle more
Lhan one Llme ln Lhe same dlrecLory
lCL31 valldaLes Lhe LexL sLyles llsLed ln Lhe 1exL column of Lhe conLrol Lable
lCL32 Compares Lhe column deflnlLlons Lo valldaLe LhaL keys and forelgn keys are of Lhe same slze and
Lype
lCL33 Checks Lhe reglsLry Lable for enLrles LhaL belong ln oLher Lables
lCL34 valldaLes LhaL every group of radlo buLLons has a defaulL
lCL33 valldaLes LhaL any flles from a cablneL flle cannoL be seL Lo run from Lhe source
lCL36 valldaLes LhaL lcons llsLed ln Lhe lcon Lable are used ln Lhe Class roglu or ShorLcuL Lables
lCL38 valldaLes LhaL componenLs lnsLalled under Lhe users proflle use a reglsLry key under PkCu as
Lhelr key paLh
lCL39 valldaLes Lhe Summary lnformaLlon sLream of Lhe daLabase
lCL40 erforms varlous mlscellaneous checks
lCL41 valldaLes LhaL enLrles ln Lhe LxLenslon and Class Lables refer Lo componenLs belonglng Lo Lhe
referenced feaLure
lCL42 Checks LhaL Class Lable enLrles do noL have exe flles seL as lnroc values and LhaL only
LocalServer conLexLs have argumenLs and ueflnroc values
lCL43 Checks LhaL nonadverLlsed shorLcuLs are ln componenLs wlLh PkCu reglsLry keys as Lhe key
paLhs
lCL44 Checks LhaL dlalog evenLs ln Lhe ConLrolLvenL Lable (newulalog Spawnulalog
SpawnWalLulalog) reference valld ulalogs ln Lhe ulalog Lable
lCL43 Checks for reserved blLs LhaL are seL
lCL46 Checks for cusLom properLles LhaL only dlffer from deflned properLles by Lhelr case
lCL47 Checks for feaLures wlLh more Lhan 1600 componenLs per feaLure
lCL48 Checks for dlrecLorles LhaL are hardcoded Lo local paLhs
lCL49 Checks for non8LC_SZ defaulL values ln Lhe reglsLry Lable
lCL30 Checks LhaL adverLlsed shorLcuLs have correcL lcons and conLexL menus
lCL31 Checks LhaL 11C/11l fonLs do noL have LlLles buL LhaL all oLher fonLs do
lCL32 Checks for nonpubllc properLles ln Lhe AppSearch Lable
lCL33 Checks for reglsLry enLrles LhaL wrlLe prlvaLe lnsLaller lnformaLlon or pollcy values
lCL34 Checks for componenLs uslng companlon flles as Lhelr key paLh flle
lCL33 Checks LhaL Lockermlsslon ob[ecLs exlsL and have valld permlsslons
lCL36 valldaLes LhaL Lhe dlrecLory sLrucLure of Lhe msl flle has a slngle valld rooL
lCL37 valldaLes LhaL lndlvldual componenLs do noL mlx permachlne and peruser daLa
lCL38 Checks LhaL your Medla 1able does noL have more Lhan 80 rows
lCL39 Checks LhaL adverLlsed shorLcuLs belong Lo componenLs LhaL are lnsLalled by Lhe LargeL feaLure
of Lhe shorLcuL
lCL60 Checks LhaL lf a flle ln Lhe llle 1able ls noL a fonL and has a verslon Lhen lL also has a language
lCL61 Checks Lhe upgrade 1able
lCL62 erforms exLenslve checks on Lhe lsolaLedComponenL 1able for daLa LhaL may cause unexpecLed
behavlor
lCL63 Checks for proper sequenclng of Lhe 8emoveLxlsLlngroducLs acLlon
lCL64 Checks LhaL new dlrecLorles ln Lhe user proflle are removed ln roamlng scenarlos
lCL63 Checks LhaL Lhe LnvlronmenL 1able does noL have lnvalld preflx or append values
lCL66 uses Lhe Lables ln Lhe daLabase Lo deLermlne whlch schema your daLabase should use
lCL67 Checks LhaL Lhe LargeL of a nonadverLlsed shorLcuL belongs Lo Lhe same componenL as Lhe
shorLcuL lLself or LhaL Lhe aLLrlbuLes of Lhe LargeL componenL ensure LhaL lL does noL change
lnsLallaLlon locaLlons
lCL68 Checks LhaL all cusLom acLlon Lypes needed for an lnsLallaLlon are valld
lCL69 Checks LhaL all subsLrlngs of Lhe form $componenLkey wlLhln a lormaLLed sLrlng do noL cross
reference componenLs
lCL70 verlfles LhaL lnLeger values for reglsLry enLrles are speclfled correcLly
lCL71 verlfles LhaL Lhe Medla 1able conLalns an enLry wlLh ulskld equal Lo 1
lCL72 Lnsures LhaL Lhe only cusLom acLlons used ln Lhe AdvLLxecuLeSequence 1able are Lype 19 Lype
33 and Lype 31 cusLom acLlons
lCL73 verlfles LhaL your package does noL reuse package codes or producL codes of Lhe Wlndows
lnsLaller Suk samples lor more lnformaLlon see ackage Codes and roducL Codes
lCL74 verlfles LhaL Lhe lAS1CLM properLy has noL been auLhored lnLo Lhe roperLy 1able
lCL73 verlfles LhaL all cusLom acLlon Lypes LhaL use an lnsLalled flle as Lhelr source are sequenced afLer
Lhe CosLllnallze AcLlon
lCL76 verlfles LhaL no flles ln Lhe 8lndlmage 1able reference Sl (Wl) caLalogs
lCL77 verlfles LhaL lnscrlpL cusLom acLlons are sequenced afLer Lhe lnsLalllnlLlallze AcLlon and before
Lhe lnsLallllnallze AcLlon
lCL78 verlfles LhaL Lhe AdvLulSequence 1able elLher does noL exlsL or ls empLy
lCL79 valldaLes references Lo componenLs and feaLures enLered ln Lhe daLabase flelds uslng Lhe
CondlLlon daLa Lype
lCL80 valldaLes LhaL 1emplaLe Summary roperLy and age CounL Summary roperLy correcLly speclfy
Lhe presence of 64blL componenLs or cusLom acLlon scrlpLs
lCL81 valldaLes Lhe MslulglLalCerLlflcaLe 1able MslulglLalSlgnaLure 1able and MslackageCerLlflcaLe
1able
lCL82 valldaLes Lhe lnsLallLxecuLeSequence 1able
lCL83 valldaLes Lhe MslAssembly 1able
lCL84 Checks Lhe sequence Lables Lo verlfy LhaL requlred SLandard AcLlons are noL seL wlLh condlLlons
lCL83 valldaLes LhaL Lhe Sourcename column of Lhe Movellle 1able ls a valld long flle name
lCL86 lssues a warnlng lf Lhe package uses Lhe Admlnuser properLy ln daLabase column of Lhe
CondlLlon Lype
lCL87 valldaLes LhaL Lhe followlng properLles have noL been auLhored ln Lhe roperLy 1able
lCL88 valldaLes Lhe ulrroperLy column of lnlllle 1able
lCL89 valldaLes LhaL Lhe value ln Lhe rogld_arenL column ln rogld 1able ls a valld forelgn key lnLo
Lhe rogld column ln rogld Lable
lCL90 osLs a warnlng lf lL flnds LhaL a shorLcuLs dlrecLory has been speclfled as a publlc properLy
lCL91 osLs a warnlng lf a flle lnl flle or shorLcuL flle ls lnsLalled lnLo a peruser proflle dlrecLory LhaL
does noL vary based on Lhe ALLuSL8S properLy
lCL92 verlfles LhaL a componenL wlLhouL a ComponenL ld Culu ls noL also speclfled as a permanenL
componenL verlfles LhaL no componenL has boLh Lhe msldbComponenLALLrlbuLesermanenL
and msldbComponenLALLrlbuLesunlnsLallCnSupersedence aLLrlbuLes
lCL93 lssues a warnlng lf a cusLom acLlon uses Lhe same name as a sLandard acLlon
lCL94 lssues a warnlng lf Lhere are any unadverLlsed shorLcuLs polnLlng Lo an assembly flle ln Lhe
global assembly cache
lCL93 Checks Lhe ConLrol 1able and 88ConLrol 1able Lo verlfy LhaL Lhe blllboard conLrols flL onLo all Lhe
blllboards
lCL96 verlfles LhaL Lhe ubllshleaLures AcLlon and Lhe ubllshroducL AcLlon are enLered ln Lhe
AdvLLxecuLeSequence 1able
lCL97 verlfles LhaL Lwo componenLs do noL lsolaLe a shared componenL Lo Lhe same dlrecLory
lCL98 verlfles Lhe descrlpLlon fleld of Lhe Cu8CuaLaSource 1able for an Cu8C daLa source
lCL99 verlfles LhaL no properLy name enLered ln Lhe ulrecLory Lable dupllcaLes a name reserved for
Lhe publlc or prlvaLe use of Lhe Wlndows lnsLaller
lCL100 Checks Lhe auLhorlng of Lhe MslLmbeddedul and MslLmbeddedChalner Lables
lCL101 Checks LhaL no value ln Lhe leaLure column of Lhe leaLure Lable exceeds a maxlmum lengLh of
38 characLers
lCL102 valldaLes Lhe MslServlceConflg and MslServlceConflglallureAcLlons Lables
lCL103 valldaLes Lhe MslrlnL and MslLaunchApp conLrol evenLs
lCL104 verlfles Lhe MslLockermlsslonsLx and Lockermlsslons Lables
lCL103 valldaLes LhaL Lhe package has been auLhored Lo be lnsLalled ln a peruser conLexL

lCF0 validaLes LhaL Lhe lCF mechanism is working. 1his lCF uses Lhe Time properLy Lo geL Lhe Lime and reLurns
eiLher Lhe sysLem Lime or None.
Result
lCF0 posLs a message giving Lhe Lime Lhe insLaller called lCF0. 1his lCF should never reLurn an error.


lCF02 validaLes LhaL cerLain reerences beLween Lhe ComponenL, File, and RegisLry Lables are reciprocal. 1hese
reerences musL Lo be reciprocal or Lhe insLaller Lo correcLly deLermine Lhe insLallaLion sLaLe o componenLs.
1he insLaller uses Lhe KeyPaLh column o Lhe ComponenL Lable Lo deLecL Lhe presence o Lhe componenL lisLed
in Lhe ComponenL column. 1he KeyPaLh column conLains a key inLo Lhe RegisLry or File Lables. 8oLh o Lhese
Lables have a ComponenL_ column LhaL conLains a key back inLo Lhe ComponenL Lable poinLing Lo Lhe
componenL LhaL conLrols Lhe regisLry enLry or ile. 1hese reerences musL be reciprocal.
Result
lCF02 posLs an error message i iL inds a reerence LhaL should be reciprocal and is noL.
Example
lCF02 would posL Lhe ollowing error message or a .msi ile conLaining Lhe daLabase enLries shown.
Copy
I1e: '8ed_I1e' cannot be the key 11e 1or Component: '81ue'. 1he 11e be1ongs to
Component: '8ed'
Component TabIe partiaI)
ComponenL KeyPaLh
Red Red_File
8lue Red_File
liIe TabIe partiaI)
File Column ComponenL_
Red_File Red
8lue_File 8lue
ComponenL 8lue reerences Red_File, buL Red_File is noL conLrolled by ComponenL 8lue and Lhereore cannoL
be Lhe KeyPaLh ile. l Lhe insLaller were called Lo geL Lhe insLallaLion sLaLe o 8lue iL would incorrecLly check
wheLher Red_File was insLalled. Changing Lhe KeyPaLh ield or 8lue in Lhe ComponenL 1able Lo 8lue_File ixes
Lhe error.

lCF03 validaLes Lhe daLa Lypes and oreign keys based on Lhe _validaLion Lable and Lhe daLabase Lables in Lhe
.msi ile.
Result
lCF03 posLs Lhe ollowing messages or Lhe validaLion errors.
lCF03 error message DescripLion
DuplicaLe Primary Key 1he primary keys o a new row duplicaLes Lhe primary keys o an exisLing
row. 1he Nullable column o Lhe _validaLion Lable shows Lhe primary keys in
Lhe daLabase.
NoL A Nullable Column A Lable column LhaL is noL speciied as nullable in Lhe Nullable column o Lhe
_validaLion Lable conLains an enLry LhaL is Null.
NoL A valid Foreign Key A column LhaL is a oreign key inLo a second Lable conLains an enLry LhaL
does noL exisL in Lhe primary key o Lhe second Lable.
value exceeds Maxvalue 1he numeric value o an enLry in a daLabase Lable exceeds Lhe maximum limiL
speciied or Lhis ield in Lhe Maxvalue column o Lhe _validaLion Lable.
value below Minvalue 1he numeric value o an enLry in a daLabase Lable is less Lhan Lhe minimum
limiL speciied or Lhis ield in Lhe Minvalue column o Lhe _validaLion Lable.
value noL a member o Lhe seL 1he value o an enLry in a daLabase Lable is noL a member o Lhe accepLable
seL o values speciied or Lhis ield in Lhe SeL column o Lhe _validaLion Lable.
lnvalid version sLring See Lhe version daLa Lype.
All UPPFR case required See Lhe UpperCase daLa Lype.
lnvalid CUlD sLring See Lhe CUlD daLa Lype.
lnvalid ile name/usage o
wildcards
1he daLabase conLains an invalid ile name or an incorrecL wildcard. See Lhe
WildCardFilename daLa Lype.
lnvalid idenLiier See Lhe ldenLiier daLa Lype.
lnvalid Language ld 1he daLabase conLains an invalid numeric Language ldenLiier (LANClD). See
Lhe Language daLa Lype.
See Language ldenLiier ConsLanLs and SLrings. For example, 033 or Lhe U.S.
and 0 or language neuLral.
lnvalid Filename See Lhe Filename daLa Lype.
lnvalid ull paLh See Lhe PaLh, AnyPaLh, and PaLhs daLa Lypes.
8ad condiLional sLring 1he daLabase conLains an invalid condiLional sLring. 1his is a LexL sLring LhaL
musL evaluaLe Lo 1RUF or FALSF according Lo Lhe CondiLional SLaLemenL
SynLax. See Lhe CondiLion daLa Lype.
lnvalid ormaL sLring See Lhe FormaLLed daLa Lype.
lnvalid LemplaLe sLring See Lhe 1emplaLe daLa Lype.
lnvalid DeaulLDir sLring See Lhe DeaulLDir daLa Lype.
lnvalid regisLry paLh See Lhe RegPaLh daLa Lype.
8ad CusLomSource daLa See Lhe CusLomSource daLa Lype.
lnvalid properLy sLring See Lhe ProperLy daLa Lype.
Missing daLa in _validaLion
Lable or old DaLabase
1here are columns in Lhe daLabase LhaL are noL lisLed in Lhe Column column
o Lhe _validaLion Lable. 1he daLabase and _validaLion Lable do noL maLch
8ad cabineL synLax/name See Lhe CabineL daLa Lype.
_validaLion Lable. lnvalid 1his is an error in auLhoring Lhe _validaLion Lable. validaLion does noL
caLegory sLring recognize Lhe caLegory sLring used or Lhis parLicular column in Lhe
_validaLion Lable. See Column DaLa 1ypes and speciy a valid caLegory.
_validaLion Lable. DaLa in
Key1able column is incorrecL
1he Key1able column in Lhe _validaLion Lable reerences a Lable LhaL does
noL exisL in Lhe daLabase.
_validaLion Lable. value in
Maxvalue column < LhaL in
Minvalue column
1his is an error in auLhoring Lhe _validaLion Lable. Min musL always be less
Lhan or equal Lo Max.
8ad shorLcuL LargeL See Lhe ShorLcuL daLa Lype.
SLring overlow (greaLer Lhan
lengLh permiLLed in column)
1he sLring's lengLh is greaLer Lhan Lhe column widLh speciied by Lhe column
deiniLion. NoLe LhaL Lhe insLaller does noL inLernally limiL Lhe column widLh
Lo Lhe speciied value. See Column DeiniLion FormaL.
Undeined error Unknown error.
Column cannoL be localized Primary key columns cannoL be localized.

lCF04 validaLes LhaL Lhe sequence number o every ile in Lhe File Lable is less Lhan or equal Lo Lhe largesL
sequence number in Lhe LasLSequence column o Lhe Media Lable.
Fach record in Lhe Media Lable represenLs a disk on Lhe source media conLaining all Lhe iles wiLh a sequence
number less Lhan or equal Lo Lhe value in Lhe LasLSequence column and greaLer Lhan Lhe LasLSequence value in
Lhe record o Lhe preceding disk.
Result
lCF04 posLs an error message i Lhere is a ile wiLh a sequence number greaLer Lhan Lhe largesL LasLSequence
number or Lhe source media.
Example
lCF04 would reporL Lhe ollowing error or Lhe example shown.
Copy
I1e: MyI1e, Sequence: 6reater 1han Max ^11owed by Meda 1ab1e.
liIe TabIe partiaI)
File Sequence
MyFile 20
Media TabIe partiaI)
Diskld LasLSequence
00

lCF05 validaLes LhaL cerLain Lables conLain required enLries. 1his includes, buL is noL resLricLed Lo, checking Lhe
ProperLy Lable or Lhe required properLies. !roductName, !roductLanguage, !roductVersion, !roductCode,
and Manufacturer.
Result
lCF05 posLs an error i a required enLry is missing.
Example
For Lhe example shown, lCF05 would reporL LhaL Lhe enLry. 'ProducLversion' is required in Lhe 'ProperLy' Lable.
ProperLy 1able (parLial)
ProperLy value
!roductName MyProducL

lCF06 checks every Lable Lo validaLe LhaL all Lhe columns lisLed in Lhe _validaLion Lable are presenL in Lhe Lable. l
a Lable does noL exisL, any _validaLion enLries or LhaL Lable are ignored.
1he purpose o lCF06 is Lo deLecL insLances in which an auLhor Lries Lo use a new _validaLion Lable LhaL relecLs a
schema change wiLh an old daLabase LhaL has noL been updaLed. lCF06 also deLecLs Lhe reverse case o an old
_validaLion Lable being used wiLh an alLered daLabase.
NoLe LhaL Lhe inLernal validaLion perormed by lCF03 caLches Lhe insLance o a Lable column noL deined in Lhe
_validaLion Lable being lisLed in Lhe columns caLalog. 1he use o boLh lCF03 and lCF06 Lhereore ensures every
column in Lhe daLabase is LesLed.
Result
lCF06 posLs an error when Lhere is a Lable column deined in Lhe _validaLion Lable LhaL is noL lisLed in Lhe
_Columns Lable.
Example
For Lhe ollowing example lCF06 posLs Lhe message
Column. version o 1able. ModuleSignaLure is noL deined in daLabase.
_VaIidation TabIe partiaI)
1able Column
ModuleSignaLure ModulelD
ModuleSignaLure version
_CoIumns TabIe partiaI)
1able Number Name
ModuleSignaLure ModulelD
1he version column o Lhe ModuleSignaLure Lable is noL in Lhe daLabase or lisLed in Lhe _Columns Lable.

lCF07 validaLes LhaL insLallaLion package speciies LhaL onLs be insLalled inLo Lhe FonLsFolder. l a onL is
insLalled Lo a older oLher Lhan Lhe FonLsFolder Lhe insLaller creaLes a shorLcuL raLher Lhan acLually insLalling Lhe
onL.
1he lCF07 cusLom acLion does Lhe ollowing or each onL in Lhe FonL Lable.
. Finds Lhe onL ile Lo which each onL LiLle belongs using Lhe FonL Lable.
2. Queries Lhe ComponenL_ column o Lhe File Lable or Lhe componenL LhaL conLrols each ile.
3. Queries Lhe DirecLory_ column o Lhe ComponenL Lable Lo obLain a key inLo Lhe DirecLory Lable.
4. Resolves Lhe DirecLory Lable Lo deLermine Lhe name o Lhe older inLo which Lhe insLaller is Lo insLall Lhe
onL ile
5. PosLs an error i Lhe onL ile is being insLalled inLo a older oLher Lhan Lhe FonLsFolder.
Result
lCF07 posLs an error i iL inds LhaL Lhe daLabase speciies LhaL a onL ile be insLalled inLo a older oLher Lhan Lhe
FonLsFolder.
Example
lC07 would posL Lhe ollowing error message or Lhe example shown.
Copy
'1ahoma' s a 1ont and must be nsta11ed to the IontsIo1der drectory. Current
1nsta11 0rectory: 'Sandbar'.
lont TabIe
File_ FonL1iLle
MyrLle 1ahoma
liIe TabIe partiaI)
File ComponenL_
MyrLle MyrLle_8each
Component TabIe partiaI)
ComponenL DirecLory_
MyrLle_8each Sand8ar
ln Lhis example, Lhe onL 1ahoma maps Lo Lhe onL ile MyrLle. 1he ile MyrLle belongs Lo Lhe componenL
MyrLle_8each. ResoluLion o Lhe DirecLory Lable shows LhaL all Lhe iles belonging Lo MyrLle_8each are Lo be
insLalled in Lhe Sandbar older. 8ecause Lhis is noL Lhe FonLsFolder, lCF07 posLs an error message.
NoLe LhaL i Lhe componenL MyrLle_8each really belongs in Lhe Sandbar older, and noL Lhe FonLsFolder, Lhen
Lhe onL 1ahoma may noL belong in MyrLle_8each. A possible ix or Lhe error would be Lo include 1ahoma in
anoLher componenL LhaL does geL insLalled in Lhe FonLsFolder direcLory.
%
lCF08 validaLes LhaL Lhe ComponenL Lable conLains no duplicaLe CUlDs. Fvery componenL musL have a unique
CUlD. No validaLion is done i Lhe ComponenL Lable does noL exisL.
Result
lCF08 posLs an error message i Lwo or more enLries in Lhe ComponenLld column o Lhe ComponenL Lable
conLain Lhe same CUlD.
Example
For Lhe ollowing example, lCF08 would posL a message sLaLing LhaL componenLs Red and Creen have duplicaLe
CUlDs.
Component TabIe partiaI)
ComponenL ComponenLld
Red [0000000A-0003-0000-0000-624474736554}
8lue [0000000A-0003-0000-0000-624474736354}
Creen [0000000A-0003-0000-0000-624474736554}
1o ix Lhis error, change eiLher o Lhe duplicaLe CUlDs.
%
lCF09 validaLes LhaL Lhe permanenL biL is seL or every componenL marked or insLallaLion inLo Lhe SysLemFolder.
lCF09 posLs a warning because you should avoid insLalling non-permanenL sysLem componenLs Lo Lhe
SysLemFolder. 1o prevenL Lhis warning, seL Lhe PermanenL biL in Lhe ALLribuLes column o Lhe ComponenL Lable
or every componenL LhaL is marked or insLallaLion inLo Lhe SysLemFolder. No validaLion is done i Lhe daLabase
does noL have a ComponenL Lable.

lCF0 validaLes LhaL Lhe adverLise sLaLe o child eaLures maLches LhaL o iLs parenL eaLure.
A child eaLure may noL disallow adverLisemenL while iLs parenL eaLure allows adverLisemenL. 1he ollowing
combinaLion o parenL and child aLLribuLes is Lhereore invalid.
Copy
parent = msdbIeature^ttrbutesIavor^dvertse
ch1d = msdbIeature^ttrbutes0sa11ow^dvertse
1his combinaLion is invalid because iL would Lurn o Lhe parenL whenever Lhe parenL was supposed Lo be
adverLised. However, Lhe reverse is allowed. A child can be marked Lo avor adverLisemenL while Lhe parenL is
marked Lo disallow adverLisemenL.
1he lCF0 cusLom acLion deLermines Lhe sLaLe o parenL and child eaLures rom Lhe ALLribuLes column o Lhe
FeaLure Lable. NoLe LhaL iL is valid Lo seL Lhe sLaLe o a eaLure Lo 0 and have iLs parenL or child seL Lo avor or
disallow adverLisemenL.
Result
lCF0 posLs an error i Lhe ALLribuLes column o Lhe FeaLure Lable conLains a mismaLch in Lhe adverLise sLaLe.
Example
lCF0 posLs Lhe ollowing error message or Lhe example shown.
Copy
Con11ctng states, one 1avors, one dsa11ows. Ch1d: Word d11ers n advertse state
1rom arent: 011ce.
NoLe or Lhis example LhaL MicrosoL Fxcel and MicrosoL Word are child eaLures o MicrosoL Oice.
FeaLure Lable (parLial)
FeaLure FeaLure_ParenL ALLribuLes
Oice Null 4
Fxcel Oice 4
Word Oice 8
ln Lhe example, Word is seL Lo disallow adverLisemenL, which conlicLs wiLh Lhe allow adverLisemenL sLaLe o iLs
parenL, Oice.
ln some cases lCF0 posLs Lhe ollowing error.
Copy
arent 1eature: 'arent' not 1ound 1or ch1d 1eature: 'Ch1d'. 1hs error means
that 1or the ch1d 1eature 'Ch1d', the 1eature 'arent' s not 1sted n the
Ieature tab1e.
1his reers Lo an invalid oreign key reerence. 1he ix is Lo have 'Child' poinL Lo iLs correcL parenL eaLure, or add
an enLry or Lhe parenL eaLure 'ParenL' Lo Lhe FeaLure Lable.

lCF2 queries Lhe CusLomAcLion, DirecLory, AdminFxecuLeSequence, AdminUlSequence, AdvLFxecuLeSequence,


lnsLallFxecuLeSequence, and lnsLallUlSequence Lables Lo validaLe Lhe ollowing.
O 1haL Lhe CosLFinalize acLion occurs in any sequence Lable conLaining acLions o Lhe Lype CusLom AcLion
1ype 35 or CusLom AcLion 1ype 5.
O 1haL every CusLom AcLion 1ype 35 comes aLer Lhe CosLFinalize acLion. in Lhe sequence Lables.
O 1haL every CusLom AcLion 1ype 5 LhaL has a oreign key Lo Lhe DirecLory Lable in Lhe Source column o
Lhe CusLomAcLion Lable comes beore Lhe CosLFinalize acLion in Lhe sequence Lables.
NoLe LhaL lCF2 does noL validaLe Lhe ormaLLed LexL in Lhe 1argeL column o Lhe CusLomAcLion Lable.
Result
lCF2 posLs an error message i validaLion o Lhe cusLom acLions LhaL seL a direcLory properLy ails.
Example
lCF2 would posL Lhree errors or Lhe example shown.
O For CA, Folder 'MyFolder' noL ound in DirecLory Lable
O For CA2, Sequence '80' comes beore CosLFinalize in Lhe lnsLallFxecuLeSequence Lable. lL musL come
aLer (CF@00)
O For CA3, Sequence '25' comes aLer CosLFinalize in Lhe lnsLallFxecuLeSequence Lable. lL musL come
beore (CF@00)
CustomAction TabIe partiaI)
AcLion 1ype Source
CA 35 MyFolder
CA2 35 WindowsFolder
CA3 5 WindowsFolder
Directory TabIe
DirecLory DirecLory_ParenL DeaulLDir
1ARCF1DlR SourceDir
WindowsFolder 1ARCF1DlR WindowsFolder
lnstaIIxecute5equence TabIe partiaI)
AcLion Sequence
CosLFinalize 00
CA2 80
CA3 25
1o ix Lhe error or CA change iLs enLry in iLs Source column in Lhe CusLomAcLion Lable Lo an exisLing enLry in
Lhe DirecLory Lable or add MyFolder Lo Lhe DirecLory Lable.
1o ix Lhe error or CA2, change iLs sequence in Lhe lnsLallFxecuLeSequence Lable such LhaL iL comes aLer Lhe
CosLFinalize acLion.
1o ix Lhe error or CA3, change iLs sequence in Lhe lnsLallFxecuLeSequence Lable such LhaL iL comes beore Lhe
CosLFinalize acLion.

lCF3 validaLes LhaL dialogs in sequence Lables appear in Lhe AdminUlSequence, or lnsLallUlSequence Lables.
Dialogs musL noL be lisLed in Lhe lnsLallFxecuLeSequence, AdminFxecuLeSequence, or AdvLFxecuLeSequence
Lables.
Result
lCF3 posLs an error message i a dialog appears in an execuLe sequence Lable.
Example
For Lhe ollowing example, lCF3 posLs an error message sLaLing LhaL Lhe 'WelcomeDialog' cannoL be lisLed in
Lhe 'lnsLallFxecuLeSequence' Lable.
lnstaIIxecute5equence TabIe partiaI)
AcLion
lnsLallFinalize
CosLFinalize
WelcomeDialog
lnstaIIUl5equence TabIe partiaI)
AcLion
CosLFinalize
CosLlniLialize
8rowseDialog
DiaIog TabIe partiaI)
Dialog
8rowseDialog
WelcomeDialog

lCF4 validaLes Lhe ollowing or eaLures.


O 1haL rooL parenL eaLures do noL have Lhe msidbFeaLureALLribuLesFollowParenL biL seL in Lhe ALLribuLes
column o Lhe FeaLure Lable. A rooL eaLure does noL have a parenL.
O 1haL no eaLure has Lhe same enLry in Lhe FeaLure and FeaLure_ParenL columns o Lhe FeaLure Lable. No
eaLure can be iLs own parenL.
Result
lCF4 posLs an error message i iL inds a rooL eaLure wiLh Lhe msidbFeaLureALLribuLesFollowParenL biL seL or a
eaLure wiLh idenLical enLries in Lhe FeaLure and FeaLure_ParenL columns o Lhe FeaLure Lable.
Example
lCF4 would reLurn Lhe ollowing errors or Lhe ollowing example.
O 1he eaLure SporL has Lhe same value in Lhe FeaLure and FeaLure_ParenL columns o Lhe File Lable.
O 1he rooL eaLure SporL has Lhe msidbFeaLureALLribuLesFollowParenL biL seL.
ln Lhe eaLure Lree o Lhis example, SporL is Lhe rooL eaLure and a parenL o Lhe Swimming and FooLball
eaLures. FreesLyle is a child eaLure o Swimming. 1ouchFooLball is a child eaLure o FooLball.
FeaLure 1able (parLial)
FeaLure ALLribuLes FeaLure_ParenL
SporL 4 SporL
Swimming SporL
FooLball 4 SporL
FreesLyle Swimming
1ouchFooLball 4 FooLball

lCF5 validaLes LhaL conLenL Lype and exLension reerences in Lhe MlMF and FxLension Lables are reciprocal. 1he
MlMF Lable musL reerence a conLenL Lype Lo an exLension LhaL Lhe FxLension Lable reerences back Lo Lhe same
conLenL Lype.
MulLiple exLensions can reerence Lhe same MlMF Lype, as long as Lhe MlMF Lype reerences back Lo one o Lhe
exLensions. MulLiple MlMF Lypes can reerence Lhe same exLension, as long as Lhe exLension reerences back Lo
one o Lhe MlMF Lypes.
NoLe LhaL whenever a MlMF reerences an exLension, LhaL exLension cannoL have Lhe MlMF_ column in Lhe
FxLension Lable seL Lo Null.
Result
lCF5 posLs an error i Lhe conLenL Lype and exLension reerences are noL reciprocal.
Example
lCF5 posLs Lwo error messages or Lhe example shown.
O 1he conLenL Lype LesL/x-laps in Lhe MlMF Lable reerences Lhe exLension LsL, buL Lhe exLension LsL in
Lhe FxLension Lable reerences laps/x-laps. 1his is noL reciprocal.
O 1he conLenL Lype laps/x-laps reerences Lhe exLension lp, buL LhaL exLension has a Null enLry in Lhe
MlMF_ column o Lhe FxLension Lable.
MlM TabIe partiaI)
ConLenL1ype FxLension_
LesL/x-LesL LsL
laps/x-laps lp
xtension TabIe partiaI)
FxLension MlMF_
LsL laps/x-laps
lp Null

lCF6 validaLes LhaL Lhe value o Lhe !roductName properLy in Lhe ProperLy Lable is no greaLer Lhan 63
characLers in lengLh. No limiL exisLs on Lhe lengLh o Lhe regisLry key or DisplayName.
Result
lCF6 posLs an error message i Lhe ProducLName seL in Lhe ProperLy Lable is longer Lhan 63 characLers.

lCF7 checks or Lhe siLuaLions shown in Lhe example aL Lhe end o Lhis Lopic.
Result
lCF7 displays an error or warning message or each o Lhe siLuaLions in Lhe example. Samples o such
messages are shown in Lhe ollowing Lable.
lCF7 error or warning DescripLion
Push8uLLon. 8uLLon o Dialog.
MyDialog does noL have an evenL
deined in Lhe ConLrolFvenL Lable.
rror
1here is a PushbuLLon conLrol LhaL is noL lisLed in Lhe ConLrolFvenL Lable.
l lCF7 reLurns Lhis error on a Push8uLLon or which Lhe nabIe ControI
aLLribuLe or Lhe VisibIe ControI aLLribuLe is noL seL in Lhe ALLribuLes column
o Lhe ConLrol Lable, check wheLher Lhe conLrol also has an enLry in Lhe
ConLrolCondiLion Lable. 1he conLrol can unexpecLedly become enabled, or
visible, i Lhe value in Lhe CondiLion column changes Lo 1rue, Fnable, or
Show.
8iLmap. 8iLmap o ConLrol.
8iLmap o Dialog. MyDialog is
1here is a 8iLmap conLrol or lcon conLrol, buL Lhe corresponding biLmap or
icon is noL lisLed in Lhe 8inary Lable. Add Lhe biLmap or icon Lo Lhe 8inary
noL in Lhe 8inary Lable.
rror
Lable.
Radio8uLLonCroup. Radio8uLLon
o ConLrol. Radio8uLLon o
Dialog. MyDialog is noL in Lhe
Radio8uLLon Lable.
warning
1here is a Radio8uLLonCroup conLrol wiLh values in Lhe ProperLy column
and Lhe ALLribuLe column o Lhe ConLrol Lable, Lhe lndirecL biL is noL seL in
Lhe ALLribuLes column. lCF7 posLs a warning because Lhe insLaller uses Lhe
properLy's value as a oreign key inLo Lhe Radio8uLLon Lable, buL Lhe value
is missing rom Lhe primary key o LhaL Lable.
l Lhe lndirecL biL is seL, Lhen Lhe properLy lisLed or Lhe conLrol is noL used
as Lhe properLy, insLead, iL is used as Lhe name o Lhe properLy LhaL is
acLually used.
1his warning can be ignored i Lhe conLrol is creaLed aL runLime. For
example, Lhe LisL8ox conLrol or on Lhe FileslnUse Dialog is only creaLed aL
runLime i Lhere are iles in use during Lhe insLallaLion.
LisL8ox. LisL8ox o ConLrol.
LisL8ox o Dialog. MyDialog is
noL in Lhe LisL8ox Lable.
warning
1here is a LisL8ox conLrol wiLh a value in Lhe ProperLy column o Lhe
ConLrol Lable and or which Lhe lndirecL biL is noL seL in Lhe ALLribuLes
column. lCF7 posLs a warning because Lhe insLaller uses Lhe properLy's
value as a oreign key inLo Lhe LisL8ox Lable, buL Lhe value is missing rom
Lhe primary key o LhaL Lable.
l Lhe lndirecL biL is seL, Lhe conLrol changes Lhe value o a properLy having
a name LhaL is Lhe value o Lhe properLy associaLed wiLh Lhis conLrol.
1his warning can be ignored i Lhe conLrol is creaLed aL runLime. For
example, Lhe LisL8ox conLrol or on Lhe FileslnUse Dialog is only creaLed aL
runLime i Lhere are iles in use during Lhe insLallaLion.
Combo8ox. Combo8ox o
ConLrol. Combo8ox o Dialog.
8yDialog is noL in Lhe Combo8ox
Lable
warning
1here is a Combo8ox conLrol wiLh a value in Lhe ProperLy column o Lhe
ConLrol Lable and or which Lhe lndirecL biL is noL seL in Lhe ALLribuLes
column. lCF7 posLs a warning because Lhe insLaller uses Lhe properLy's
value as a oreign key inLo Lhe Combo8ox Lable, buL Lhe value is missing
rom Lhe primary key o LhaL Lable.
l Lhe lndirecL biL is seL, Lhe conLrol changes Lhe value o a properLy having
a name LhaL is Lhe value o Lhe properLy associaLed wiLh Lhis conLrol.
1his warning can be ignored i Lhe conLrol is creaLed aL runLime. For
example, Lhe LisL8ox conLrol or on Lhe FileslnUse Dialog is only creaLed aL
runLime i Lhere are iles in use during Lhe insLallaLion.
LisLview. LisLview o ConLrol.
LisLview o Dialog. MyDialog is
noL in Lhe LisLview Lable.
warning
1here is a LisLview conLrol wiLh a value in Lhe ProperLy column o Lhe
ConLrol Lable and or which Lhe lndirecL biL is noL seL in Lhe ALLribuLes
column. lCF7 posLs a warning because Lhe insLaller uses Lhe properLy's
value as a oreign key inLo Lhe LisLview Lable, buL Lhe value is missing rom
Lhe primary key o LhaL Lable.
l Lhe lndirecL biL is seL, Lhe conLrol changes Lhe value o a properLy having
a name LhaL is Lhe value o Lhe properLy associaLed wiLh Lhis conLrol.
1his warning can be ignored i Lhe conLrol is creaLed aL runLime. For
example, Lhe LisL8ox conLrol or on Lhe FileslnUse Dialog is only creaLed aL
runLime i Lhere are iles in use during Lhe insLallaLion.
8iLmap. '8iLmap2' or ConLrol.
'8uLLon2' o Dialog. 'MyDialog'
noL ound in 8inary Lable
rror
1here is a PushbuLLon ConLrol or Checkbox ConLrol or which Lhe 1exL
column o Lhe ConLrol Lable does noL conLain a oreign key inLo Lhe record
o Lhe 8inary Lable conLaining Lhe biLmap or icon.
8iLmap. '8iLmap3' or ConLrol.
'Radio8uLLon2' o Dialog.
'MyDialog' noL ound in 8inary
Lable
or
lcon. 'lcon' or ConLrol.
'Radio8uLLon3' o Dialog.
'MyDialog' noL ound in 8inary
Lable
rror
1here is a Radio8uLLonCroup conLrol or which Lhe 1exL column o Lhe
Radio8uLLon Lable does noL conLain a oreign key inLo Lhe record o Lhe
8inary Lable conLaining Lhe biLmap or icon.
PicLure conLrol. '8uLLon3' o
Dialog. 'MyDialog' has boLh Lhe
lcon and 8iLmap aLLribuLes seL
1here is a Push8uLLon, Check8ox, or Radio8uLLonCroup conLrol wiLh boLh
Lhe lcon biL or 8iLmap biL seL in Lhe ALLribuLes column o Lhe ConLrol Lable.
ou cannoL seL boLh aLLribuLes LogeLher.
rror
Example
ControI TabIe partiaI)
Dialog_ ConLrol 1ype ALLribuLes ProperLy 1exL
MyDialog 8uLLon Push8uLLon 0 OK
MyDialog 8iLmap 8iLmap 0 8iLmap
MyDialog Radio8uLLon Radio8uLLonCroup 0 Radio8uLLon
MyDialog LisL8ox LisL8ox 0 LisL8ox
MyDialog Combo8ox Combo8ox 0 Combo8ox
MyDialog LisLview LisLview 0 LisLview
MyDialog 8uLLon2 PushbuLLon 26244 8iLmap2
MyDialog Radio8uLLon2 Radio8uLLonCroup 26244 ProperLy2
MyDialog Radio8uLLon3 Radio8uLLonCroup 524288 ProperLy3
MyDialog 8uLLon3 PushbuLLon 786432 Ambiguous
RadioButton TabIe partiaI)
ProperLy_ Order 1exL
ProperLy2 8iLmap3
ProperLy3 2 lcon
1he ollowing Lables are empLy.
O ConLrolFvenL 1able
O LisL8ox 1able
O Combo8ox 1able
O LisLview 1able
O 8inary 1able
%
lCF8 validaLes LhaL any empLy direcLories used as a key paLh or a componenL are lisLed in Lhe CreaLeFolder
Lable.
l Lhe KeyPaLh column o Lhe ComponenL Lable is Null, Lhis means LhaL direcLory lisLed in Lhe DirecLory_ column
is Lhe key paLh or LhaL componenL. 8ecause olders creaLed by Lhe insLaller are deleLed when Lhey become
empLy, Lhis older musL be lisLed in Lhe CreaLeFolder Lable Lo prevenL Lhe insLaller rom aLLempLing Lo insLall
every Lime.
Do noL make Lhe SysLemFolder direcLory Lhe key paLh o a componenL. 8ecause Lhis older is presenL on every
operaLing sysLem, Lhe insLaller always deLecLs Lhe key paLh wheLher or noL Lhe componenL is presenL. ln Lhis
case, Lhe key paLh should be a ile, regisLry enLry, or OD8C daLa source.
When perorming a validaLion lCF8 irsL checks wheLher Lhe ollowing are all Lrue.
O 1he KeyPaLh column o Lhe ComponenL Lable conLains a Null value.
O 1haL Lhere are no iles lisLed or Lhe componenL in Lhe File Lable.
O 1haL Lhere are no iles or Lhe componenL lisLed in Lhe RemoveFile Lable and LhaL Lhe value in Lhe
DirProperLy is Lhe same as Lhe DirecLory_ column o Lhe ComponenL Lable.
O 1haL Lhere are no iles or Lhe componenL lisLed in Lhe DuplicaLeFile Lable and LhaL Lhe value in Lhe
DesLFolder is Lhe same as Lhe DirecLory_ column o Lhe ComponenL Lable.
O 1haL Lhere are no iles or Lhe componenL lisLed in Lhe MoveFile Lable and LhaL Lhe value in Lhe
DesLFolder is Lhe same as Lhe DirecLory_ column o Lhe ComponenL Lable.
l Lhese are all Lrue Lhen lCF8 validaLes Lhe ollowing.
O 1haL Lhe ComponenL_ column o Lhe CreaLeFolder Lable has Lhe same value as Lhe ComponenL column
o Lhe ComponenL Lable.
O 1haL Lhe DirecLory_ column o Lhe CreaLeFolder Lable has Lhe same value as Lhe DirecLory_ column o
Lhe ComponenL Lable.
Result
lCF8 posLs an error message i Lhe insLallaLion package speciies a direcLory as Lhe key paLh or componenL
LhaL is noL lisLed in Lhe CreaLeFolder Lable.
%
lCF9 validaLes LhaL adverLised componenLs reerence a ile in Lhe KeyPaLh column o Lhe ComponenL Lable and
LhaL an adverLised shorLcuL reerences a direcLory in Lhis column.
lCF9 validaLes LhaL adverLised componenLs or shorLcuLs have a ComponenLld. ComponenLs in Lhe
PublishComponenL Lable, which are noL adverLised in anoLher Lable, are only checked Lo see wheLher Lhey have
a ComponenLld.
Result
lCF9 posLs an error message i Lhe KeyPaLh column o Lhe ComponenL Lable does noL reerence a ile in Lhe
case o an adverLised componenL or a direcLory in Lhe case o an adverLised shorLcuL. lCF9 posLs an error
message i any adverLised componenLs or shorLcuLs do noL have a ComponenLld.
Example
lCF9 posLs Lhe ollowing error messages or Lhe example shown.
O FxLension lp reerences Lhe componenL Comp which does noL have a ComponenLld speciied in Lhe
ComponenL Lable.
O FxLension exe reerences Lhe componenL Comp4 which reerences a direcLory as iLs KeyPaLh. 1he
KeyPaLh is Null in Lhe ComponenL Lable.
O ShorLcuL ShorLcuL2 reerences Lhe componenL Comp3 which reerences a RegisLry enLry as Lhe key
paLh. 1he value o Lhe ALLribuLes column in Lhe ComponenL Lable is 4.
Component TabIe partiaI)
ComponenL ComponenLld ALLribuLes KeyPaLh
Comp Null 0 File
Comp2 [00000002-0003-0000-0000-624474736554} 0 File2
Comp3 [00000003-0003-0000-0000-624474736554} 4 Reg3
Comp4 [00000004-0003-0000-0000-624474736554} 0 Null
xtension TabIe partiaI)
FxLension ComponenL_
lp Comp
LsL Comp2
exe Comp4
5hortcut TabIe partiaI)
ShorLcuL ComponenL_ FeaLure_
ShorLcuL Comp4 ProducLFeaLure
ShorLcuL2 Comp3 ProducLFeaLure
leature TabIe partiaI)
FeaLure
ProducLFeaLure
Note l Lhe exLension lp and exe boLh reerence Lhe same componenL, Lhe FXF or COM server LhaL opens Lhem
musL be Lhe same. 1his FXF is normally Lhe KeyPaLh or Lhe ComponenL. For OFFlCF, Lhe exLensions doc and xls
cannoL reerence Lhe same componenL because Lhe same FXF does noL open boLh exLensions. ou need
winword.exe Lo open doc exLensions and you need excel.exe Lo open xls exLensions.

lCF20 validaLes Lhe sLandard dialogs and dialog requiremenLs o an insLallaLion package having an auLhored
user inLerace. lnsLallaLion packages wiLh an auLhored user inLerace have a Dialog Lable and Lhe LlMlTUl
properLy is noL seL.
lCF20 validaLes Lhe ollowing Lables and requiremenLs.
SLandard
dialog
Dialog requiremenLs
FileslnUse A LisL8ox Lable.
Dialog A LisL8ox conLrol wiLh Lhe ProperLy column o Lhe ConLrol Lable seL Lo FilelnUseProcess.
A Push8uLLon conLrol wiLh FndDialog enLered inLo Lhe FvenL column o Lhe ConLrolFvenL Lable
and lgnore in Lhe ArgumenL column.
A Push8uLLon conLrol wiLh FndDialog enLered inLo Lhe FvenL column o Lhe ConLrolFvenL Lable
and FxiL in Lhe ArgumenL column.
A Push8uLLon conLrol wiLh FndDialog enLered inLo Lhe FvenL column o Lhe ConLrolFvenL Lable
and ReLry in Lhe ArgumenL column.
Frror Dialog 1he Frror Dialog SLyle biL musL be seL Lo speciy Lhe dialog, wiLh any name, is an Frror Dialog.
A 1exL conLrol named Frror1exL.
Frror1exL in Lhe ConLrol_FirsL column o Lhe Dialog Lable.
A PushbuLLon conLrol, named A, wiLh FndDialog in Lhe FvenL column o Lhe ConLrolFvenL Lable
and FrrorAborL in Lhe ArgumenL column.
A PushbuLLon conLrol, named C, wiLh FndDialog in Lhe FvenL column o Lhe ConLrolFvenL Lable
and FrrorCancel in Lhe ArgumenL column.
A PushbuLLon conLrol, named l, wiLh FndDialog in Lhe FvenL column o Lhe ConLrolFvenL Lable
and Frrorlgnore in Lhe ArgumenL column.
A PushbuLLon conLrol, named N, wiLh FndDialog in Lhe FvenL column o Lhe ConLrolFvenL Lable
and FrrorNo in Lhe ArgumenL column.
A PushbuLLon conLrol, named O, wiLh FndDialog in Lhe FvenL column o Lhe ConLrolFvenL Lable
and FrrorOk in Lhe ArgumenL column.
A PushbuLLon conLrol, named R, wiLh FndDialog in Lhe FvenL column o Lhe ConLrolFvenL Lable
and FrrorReLry in Lhe ArgumenL column.
A PushbuLLon conLrol, named , wiLh FndDialog in Lhe FvenL column o Lhe ConLrolFvenL Lable
and Frrores in Lhe ArgumenL column.
1he widLh, heighL, and coordinaLes should be Lhe same or all o Lhe buLLons. 1he X
coordinaLes are deLermined by Lhe insLaller.
l a conLrol named Frrorlcon exisLs, iL musL have lcon in Lhe 1ype column o Lhe ConLrol Lable.
FxiL Dialog 1here musL be eiLher a Dialog or CusLom AcLion in Lhe AdminUlSequence Lable and
lnsLallUlSequence Lable wiLh a value - in Lhe Sequence Column.
UserFxiL
Dialog
1here musL be eiLher a Dialog or CusLom AcLion in Lhe AdminUlSequence Lable and
lnsLallUlSequence Lable wiLh a value -2 in Lhe Sequence Column.
FaLalFrror
Dialog
1here musL be eiLher a Dialog or CusLom AcLion in Lhe AdminUlSequence Lable and
lnsLallUlSequence Lable wiLh a value -3 in Lhe Sequence Column.
Result
lCF20 posLs an error message i iL cannoL validaLe LhaL Lhe sLandard dialogs and requiremenLs are presenL in Lhe
insLallaLion package.

lCF2 validaLes LhaL every componenL in Lhe ComponenL Lable belongs Lo a eaLure. lL uses Lhe
FeaLureComponenLs Lable Lo check or Lhis mapping.
Result
lCF2 posLs an error message i Lhe insLallaLion package conLains a componenL LhaL does noL belong Lo a
eaLure.
Example
For Lhe ollowing example, lCF2 posLs an error message sLaLing LhaL Lhe componenL Comp does noL map Lo
any eaLure.
Component TabIe partiaI)
ComponenL
Comp
Comp2
leatureComponents TabIe partiaI)
FeaLure ComponenL
FeaLure Comp2

lCF22 uses Lhe FeaLureComponenLs Lable Lo validaLe Lhe mapping o eaLures and componenLs reerenced in
Lhe PublishComponenL Lable.
Result
lCF22 posLs an error message i Lhe eaLures and componenLs are mapped incorrecLly in Lhe PublishComponenL
Lable.
Example
For Lhe ollowing example lCF22 posLs an error LhaL [00000003-0004-0000-0000-624474732465} does noL have
Lhe correcL mapping or Lhe FeaLure_ and ComponenL_ columns.
!ubIishComponent TabIe partiaI)
ComponenLld FeaLure_ ComponenL_
[00000002-0003-0000-0000-624474736554} FeaL Comp
[00000003-0004-0000-0000-624474732465} FeaL Comp2
leatureComponents TabIe partiaI)
FeaLure_ ComponenL_
FeaL Comp

lCF23 validaLes Lhe conLrol Lab order or each dialog box.


lCF23 validaLes Lhe ollowing in Lhe Dialog Lable and ConLrol Lable.
O 1haL every record in Lhe Dialog Lable speciies a conLrol in Lhe ConLrol_FirsL column LhaL exisLs in Lhe
dialog box speciied by Lhe Dialog column.
O 1haL every record in Lhe ConLrol Lable speciies a conLrol in Lhe ConLrol_NexL column LhaL is on Lhe
same dialog as Lhe conLrol lisLed in Lhe ConLrol column, or ConLrol_NexL conLains Lhe Null value.
O 1haL ollowing Lhe ConLrol_NexL enLries rom conLrol Lo conLrol in Lhe ConLrol Lable makes a single,
closed, loop LhaL comes back Lo Lhe iniLial conLrol. NoL every conLrol needs Lo be in Lhe loop, buL Lhe
loop musL pass Lhrough every conLrol LhaL has an enLry in Lhe ConLrol_NexL column.
Result
lCF23 posLs an error message i Lhe Lab order o conLrols does noL orm a single closed loop in Lhe dialog box.
Example
lCF23 would posL Lhe ollowing error messages or Lhe example shown.
O Dialog has no ConLrol_FirsL.
O ConLrol_FirsL o dialog Dialog2 reers Lo nonexisLenL conLrol ConLrolX.
O Dialog3 has dead-end Lab order aL conLrol ConLrol8.
O Dialog4 has malormed Lab order aL conLrol ConLrolC
O Dialog5 has malormed Lab order aL conLrol ConLrolC.
O ConLrol_NexL o conLrol Dialog6.ConLrolC links Lo unknown conLrol.
DiaIog TabIe partiaI)
Dialog ConLrol_FirsL
Dialog
Dialog2 ConLrolX
Dialog3 ConLrolA
Dialog4 ConLrolA
Dialog5 ConLrolA
ControI TabIe partiaI)
Dialog ConLrol ConLrol_NexL
Dialog ConLrolA
Dialog ConLrol8 ConLrolA
Dialog2 ConLrolA ConLrol8
Dialog2 ConLrol8 ConLrolA
Dialog3 ConLrolA ConLrol8
Dialog3 ConLrol8
Dialog4 ConLrolA ConLrol8
Dialog4 ConLrol8 ConLrolC
Dialog4 ConLrolC ConLrol8
Dialog5 ConLrolA ConLrol8
Dialog5 ConLrol8 ConLrolC
Dialog5 ConLrolC ConLrolA
Dialog5 ConLrolD ConLrolA
Dialog6 ConLrolA ConLrol8
Dialog6 ConLrol8 ConLrolC
Dialog6 ConLrolC ConLrolX
Dialog6 ConLrolD ConLrolA
1o ix Lhese errors noLe Lhe ollowing in Lhe above Lables and make Lhe indicaLed changes.
NoL every row in Lhe Dialog Lable has a conLrol speciied in Lhe ConLrol_FirsL column. Change Lhe ConLrol_FirsL
column o Lhe Dialog record in Lhe Dialog Lable Lo a conLrol LhaL exisLs in Dialog.
NoL every row in Lhe Dialog Lable has a conLrol speciied in Lhe ConLrol_FirsL column LhaL exisLs on Lhe dialog
box. Change Lhe ConLrol_FirsL column o Lhe Dialog2 Lo a conLrol LhaL exisLs in Dialog2.
Following Lhe ConLrol_NexL enLries in Lhe ConLrol Lable rom conLrol Lo conLrol does noL make a closed loop in
every case. Change Lhe ConLrol_NexL column or ConLrol8 in Dialog3 Lo ConLrolA.
Following Lhe ConLrol_NexL enLries in Lhe ConLrol Lable rom conLrol Lo conLrol does noL lead back Lo Lhe iniLial
conLrol in every case. Change Lhe ConLrol_NexL column or ConLrolC in Dialog4 Lo reer Lo ConLrolA.
Following Lhe ConLrol_NexL enLries in Lhe ConLrol Lable rom conLrol Lo conLrol does noL pass Lhrough every
conLrol in Lhe dialog box having an enLry in Lhe ConLrol_NexL column. Change Lhe ConLrol_NexL column or
ConLrolC in Dialog5 Lo ConLrolD.
ConLrol_NexL does noL reer Lo a valid conLrol LhaL is in Lhe same dialog as Lhe conLrol lisLed in Lhe ConLrol
column. Change Lhe ConLrol_NexL column or ConLrolC in Dialog6 Lo reer Lo ConLrolD.

lCF24 validaLes Lhe ollowing properLies in Lhe ProperLy Lable.


O 1haL Lhe !roductCode ProperLy is a valid CUlD daLa Lype.
O 1haL Lhe !roductVersion ProperLy is a valid producL version.
O 1haL Lhe !roductLanguage ProperLy is a valid Language daLa Lype.
Result
lCF24 posLs an error message i any o Lhese properLies are noL in Lhe orm o a valid daLa Lype.

lCF25 validaLes LhaL a .msi ile saLisies all o iLs inLernal merge module dependencies and exclusions. lCF
validaLes Lhe ollowing.
O 1haL all merge module dependencies indicaLed in Lhe .msi ile's ModuleDependency Lable are saLisied
by aL leasL one merge module lisLed in Lhe ModuleSignaLure Lable.
O 1haL none o Lhe excluded merge modules in Lhe ModuleFxclusion Lable are incompaLible wiLh Lhe
merge modules lisLed in Lhe ModuleSignaLure Lable.
Result
lCF25 posLs an error message i .msi ile has previously been merged wiLh an incompaLible merge module or i
iL has noL been merged wiLh a necessary merge module.
Example
lCF25 posLs Lhe ollowing errors or Lhe example shown.
Copy
0ependency 1a1ure: ueed Modu1ex v.
Modu1e Modu1e822 v. s exc1uded.
ModuIe5ignature TabIe
ModulelD Language version
ModuleA 0 .0
Module8 033 .0
ModuIeDependency TabIe
ModulelD ModuleLanguage RequiredlD RequiredLanguage Requiredversion
ModuleA 0 ModuleX 0 2.0
ModuIexcIusion TabIe
Modulel
D
ModuleLanguag
e
Fxcludedl
D
FxcludedLanguag
e
FxcludedMinversio
n
FxcludedMaxversio
n
ModuleA 0 Module8 033

lCF26 validaLes LhaL each o Lhe ollowing sequence tcbles conLain Lhe acLions LhaL are required by Lhe Lable and
does noL conLain any acLions disallowed in Lhe Lable.
O AdminUlSequence Lable
O AdminFxecuLeSequence Lable
O lnsLallUlSequence Lable
O lnsLallFxecuLeSequence Lable
Result
lCF26 posLs an error message i Lhe insLallaLion package has a sequence Lable LhaL lacks a required acLion or
LhaL conLains an acLion LhaL is disallowed or Lhe Lable.
Example
lCF26 error DescripLion
AcLion. 'AcLion' is required in Lhe
lnsLallFxecuLeSequence Sequence Lable.
A required acLion is missing rom Lhe indicaLed sequence Lable.
See Lhe LemplaLe.msi or Lhe suggesLed sequence Lables in Using
a Sequence 1able.
AcLion. 'AcLion2' is prohibiLed in Lhe
lnsLallFxecuLeSequence Sequence Lable.
1his acLion cannoL be in Lhe indicaLed sequence Lable. Remove
Lhis acLion rom Lhe sequence Lable.

lCF27 validaLes Lhe sequence tcbles o an insLallaLion package or valid acLions, acLion sequence resLricLions, and
organizaLion in Search, CosLing, SelecLion, and FxecuLion secLions.
1he lCF27 cusLom acLion validaLes Lhe ollowing.
O 1haL Lhe acLions lisLed in Lhe AcLion column o Lhe sequence Lables are a sLandard acLions, a cusLom
acLion lisLed in Lhe CusLomAcLion Lable, or a dialog box lisLed in Lhe Dialog Lable.
O 1haL acLions subjecL Lo sequencing resLricLions are in Lhe correcL relaLive order Lo each oLher in Lhe
acLion sequence. Sequencing resLricLions resulL when one acLion is dependenL on anoLher.
O 1haL acLions resLricLed Lo a parLicular secLion o Lhe sequence are locaLed where Lhey belong. lCF27
validaLes Lhe ollowing organizaLion o Lhe sequence Lables. NoLe LhaL noL every sequence Lable has
every secLion. See Lhe suggesLed sequence Lables in Using a Sequence 1able.
Sequence Lable
secLion
Range in acLion
sequence
AcLions belonging Lo secLion
Search [sLarL} Lo CosLlniLialize AcLions LhaL search or exisLing applicaLions.
AppSearch
CCPSearch
CosLing CosLlniLialize Lo
CosLFinalize acLion
AcLions LhaL do ile cosLing.
CosLlniLialize
FileCosL
CosLFinalize
SelecLion CosLFinalize Lo
lnsLallvalidaLe
AcLions LhaL seL olders or eaLure sLaLes.
SeLOD8CFolders acLion
FxecuLion lnsLallvalidaLe Lo
lnsLallFinalize
ScripL acLions, such as RegisLraLion, PublicaLion, lnsLallaLion
(where you copy iles).
NoLe Lhe lnsLallFinalize acLion musL be in Lhe Lable i and only i
Lhere are acLions in Lhe FxecuLion secLion.
PosLFxecuLion lnsLallFinalize Lo [end} RemoveFxisLingProducLs
lCF27 validaLes Lhe ollowing Lables.
O AdvLFxecuLeSequence
O AdminUlSequence
O AdminFxecuLeSequence
O lnsLallUlSequence
O lnsLallFxecuLeSequence
Result
lCF27 posLs an error message i Lhere are sequence Lables in Lhe package wiLh invalid acLion sequencing or
organizaLion.
Example
lCF27 error DescripLion
Unknown acLion. 'AcLion' o
lnsLallFxecuLeSequnence Lable. NoL a sLandard
acLion and noL ound in CusLomAcLion or Dialog
Lables
1here is an acLion lisLed in Lhe sequence Lable indicaLed
LhaL is noL a sLandard acLions, a cusLom acLion lisLed in
Lhe CusLomAcLion Lable, or a dialog box lisLed in Lhe
Dialog Lable.
'AcLion2' in lnsLallFxecuLe Lable in wrong place.
CurrenL. Search, CorrecL. CosLing
1here is an acLion in a sequence Lable LhaL is incorrecLly
placed wiLh respecL Lo Lhe sequence number in Lhe
Sequence column.
"CurrenL" indicaLes Lhe currenL placemenL o Lhe acLion
in Lhe Search, CosLing, SelecLion, or FxecuLion secLions o
Lhe indicaLed sequence Lable.
"CorrecL" indicaLes in which secLion Lhe acLion belongs.
1o ix Lhis error, change Lhe sequence number o Lhe
acLion Lo inside Lhe correcL secLion. NoLe LhaL some
acLion can be locaLed in more Lhan one secLion.
'lnsLallFinalize' AcLion in lnsLallFxecuLeSequence
Lable can only be called when scripL operaLions exisL
Lo be execuLed
1here is an lnsLallFinalize acLion in a sequence Lable LhaL
does noL conLain any scripL operaLions in Lhe FxecuLion
secLion o Lhe Lable.
Add acLions Lo Lhe FxecuLion secLion or remove Lhe
lnsLallFinalize acLion rom Lhe Lable.
lnsLallFinalize musL be called in
lnsLallFxecuLeSequence Lable as scripL operaLions
exisL Lo be execuLed
1here is a sequence Lable conLaining acLions in Lhe
FxecuLion secLion LhaL does noL include Lhe
lnsLallFinalize acLion.
Add Lhe lnsLallFinalize acLion Lo Lhis sequence Lable and
give iL Lhe greaLesL sequence number Lo place iL lasL in
Lhe acLion sequence.
AcLion. 'AcLion3' in lnsLallFxecuLeSequence Lable
musL come beore Lhe 'AcLion5' acLion. CurrenL
seq#. 200. DependenL seq#. 00
1here is an acLion in Lhe indicaLed sequence Lable LhaL is
sequenced aLer a dependenL acLion.
Change Lhe sequence number on Lhe dependenL acLion
so LhaL iL comes beore Lhe acLion.
AcLion. 'AcLion4' in lnsLallFxecuLeSequence Lable
musL come aLer Lhe 'AcLion6' acLion.
1here is an acLion in Lhe indicaLed sequence Lable LhaL is
sequenced beore an acLion LhaL iL is dependenL upon.
Change Lhe sequence number on Lhe acLion so LhaL iL
comes aLer iLs dependenL acLion.

%
lCF28 is commonly used Lo validaLe LhaL Lhe ForceRebooL acLion is placed beore or aLer, and never wiLhin, a
speciic group o acLions in Lhe acLion sequence Lables. See Lhe ForceRebooL acLion Lopic Lo deLermine Lhe
acLions LhaL comprise Lhis group.
lCF28 validaLes acLions in Lhe ollowing sequence Lables.
AdminUlSequence Lable
AdminFxecuLeSequence Lable
lnsLallUlSequence Lable
lnsLallFxecuLeSequence Lable
Result
lCF28 posLs an error message i ForceRebooL is sequenced wiLhin Lhe speciied acLion group.
Example
For Lhe example shown, lCF28 posLs Lhe ollowing error message.
Copy
^cton: 'Iorce8eboot' o1 tab1e 1nsta11LxecuteSequence s not permtted n the range S
to S because t cannot separate a set o1 actons contaned n ths range.
lnstaIIxecute5equence TabIe
AcLion Sequence
ForceRebooL 0
RegisLerMlMFlno 5
RegisLerProgldlno 5
1he sequence number o 0 given Lo ForceRebooL breaks generaLes Lhe error, because iL comes beLween Lhe
sequence numbers o RegisLerMlMFlno and RegisLerProgldlno.
%
lCF29 validaLes LhaL LruncaLed sLream names remain unique. Any Lable having a 8inary or ObjecL column is
validaLed. See Lhe 8inary column daLa Lype.
Handling o sLreams by Lhe Win32 OLF sLrucLured sLorage implemenLaLion limiLs sLream names. See OLF
LimiLaLions on SLreams. 1he insLaller can compress sLream names up Lo 62 characLers in lengLh. Names longer
Lhan Lhis are LruncaLed.

lCF30 validaLes LhaL Lhe insLallaLion o componenLs conLaining Lhe same ile never insLalls Lhe ile more Lhan
once in Lhe same direcLory.
lCF30 goes Lo every componenL in Lhe ComponenL Lable and Lhen deLermines Lhe componenL's LargeL direcLory
rom Lhe DirecLory Lable. lL Lhen checks Lo see which o Lhese componenLs insLall Lo Lhe same LargeL direcLory.
Finally, iL uses Lhe File Lable Lo veriy LhaL none o Lhe iles in Lhese componenLs have Lhe same name.
lCF30 checks boLh long ile names (LFN) and shorL ile names (SFN).
lCF30 does noL evaluaLe properLies in Lhe resoluLion o direcLories because Lhese properLies can change aL
runLime and alLer Lhe direcLory resoluLion scheme. 1his means lCF30 can deLecL ile collisions due Lo direcLories
wiLh Lhe same properLy in Lheir paLhs, buL does noL deLecL collisions resulLing rom Lwo properLies having Lhe
same value.
Result
lCF30 posLs an error message or each pair o componenLs LhaL insLalls Lhe same ile Lo Lhe same direcLory.
Example
1he example shown reLurns each o Lhe ollowing errors Lwice.
lCF30 error or warning DescripLion
FRROR. 1he LargeL ile 'RFADMF.sL' is insLalled in
'1ARCF1DlR\PRODUC1' by Lwo dierenL componenLs on an
SFN sysLem. 'ComponenL' and 'ComponenL2'. 1his breaks
componenL reerence counLing.
ComponenL and ComponenL2 boLh have a ile
named 'RFADFMF.sL'.
When using shorL ile names, Lhe insLaller
insLalls boLh Dir and Dir2 Lo Lhe same
direcLory, 1ARCF1DlR\PRODUC1.
lCF30 generaLe Lwo errors, one or each ile. ln
an auLhoring environmenL LhaL displays error
locaLions, Lhe irsL error is aL one ile's enLry in
Lhe File 1able, and Lhe second aL Lhe locaLion o
Lhe oLher ile.
FRROR. lnsLallaLion o a condiLionalized componenL would
cause Lhe LargeL ile 'RFADMF.sL' Lo be insLalled in
'1ARCF1DlR\COMMON 1OOLS' by Lwo dierenL componenLs
on an LFN sysLem. 'ComponenL3' and 'ComponenL4'. 1his
would break componenL reerence counLing.
ComponenL4 has an enLry in Lhe CondiLion
column o Lhe ComponenL Lable and
ComponenL3 does noL.
l VersionNT is 1rue, ComponenL4 is insLalled,
and Lhere a collision wiLh Lhe Readme.sL
always insLalled by ComponenL3.
lCF30 generaLes 4 errors, one pair or SFN, one
or LFN.
WARNlNC. 1he LargeL ile 'RFADMF.sL' mighL be insLalled in
'1ARCF1DlR\COMMON 1OOLS' by Lwo dierenL
condiLionalized componenLs on an SFN sysLem.
'ComponenL4' and 'ComponenL5'. l Lhe condiLions are noL
muLually exclusive, Lhis will break Lhe componenL reerence
counLing sysLem.
8ecause ComponenL4 and ComponenL5 boLh
have enLries in Lhe CondiLion column o Lhe
ComponenL Lable Lhis ile collision may noL
occur.
lCF30 only posLs a warning because Lhe
condiLions musL be deLermined aL Lhe Lime o
Lhe insLallaLion.
lCF30 generaLes 4 warnings, one pair or SFN,
one or LFN.
ComponenL 1able (parLial)
ComponenL DirecLory CondiLion
ComponenL Dir
ComponenL2 Dir2
ComponenL3 Dir3
ComponenL4 Dir3 versionN1
ComponenL5 Dir3 version9X
DirecLory 1able
DirecLory ParenL_DirecLory DeaulLDir
SOURCFDlR 1ARCF1DlR
Dir SOURCFDlR ProducL|ComponenL ProducL..
Dir2 SOURCFDlR ProducL..
Dir3 SOURCFDlR Common|Common 1ools.
File 1able (parLial)
File ComponenL_ FileName
File ComponenL RFADMF.sL
File2 ComponenL2 RFADMF.sL
File3 ComponenL3 RFADMF.sL
File4 ComponenL4 RFADMF.sL
File5 ComponenL5 RFADMF.sL

lCF3 validaLes any predeined onL sLyles used in conLrols LhaL display LexL. lL also validaLes LhaL Lhe
DefauItUllont properLy reers Lo a valid onL sLyle.
ConLrols can have a predeined onL sLyle as described in Adding ConLrols and 1exL. 1o seL Lhe onL and onL
sLyle o a LexL sLring, preix Lhe sLring o displayed characLers wiLh [\sLyle} or [&style}. Where sLyle is an idenLiier
lisLed in Lhe 1exLSLyle column o Lhe 1exLSLyle Lable. l neiLher o Lhese are presenL, buL Lhe DefauItUllont
properLy is deined as a valid LexL sLyle, LhaL onL will be used.
lCF3 checks Lhe 1exL column or each conLrol in Lhe ConLrol 1able Lo veriies LhaL a valid enLry exisL in Lhe
1exLSLyle Lable.
lCF3 ignores Lhe Scrollable1exL ConLrol.
Results
lCF3 posLs an error message or undeined sLyles, sLyle names LhaL are Loo long, a missing 1exLSLyle Lable, and
sLyle Lags wiLh no closing brace.
lCF3 posLs a warning i Lhe sLyle Lag is noL aL Lhe beginning o Lhe line, or i a conLrol has mulLiple sLyle Lags.
Example
lCF3 posLs Lhe ollowing errors or Lhe example shown.
O ConLrol Dialog8.ConLrol uses undeined 1exLSLyle 8adSLyle.
O ConLrol Dialog8.ConLrol2 uses undeined 1exLSLyle 8adSLyle.
O ConLrol Dialog8.ConLrol6 is missing closing brace in LexL sLyle.
O ConLrol Dialog8.ConLrol3 speciies a LexL sLyle LhaL is Loo long Lo be valid.
lCF3 posLs Lhe ollowing warning or Lhe example shown.
O 1exL SLyle Lag in Dialog8.ConLrol4 has no eecL. Do you really wanL iL Lo appear as LexL
ConLrol 1able (parLial)
Dialog ConLrol 1exL
DialogA ConLrol0 [\OKSLyle}1his is Lhe LexL Lo display.
DialogA ConLrol [&OKSLyle}1his is Lhe LexL Lo display.
Dialog8 ConLrol [&8adSLyle}1his is Lhe LexL Lo display.
Dialog8 ConLrol2 [\8adSLyle}1his is Lhe LexL Lo display.
Dialog8 ConLrol3 [&SLyle LhaL is over 72 chars and Lhereore cannoL possibly be a sLyle even i somehow you
did manage Lo geL iL in Lhe 1exLSLyle Lable}1his is Lhe LexL Lo display.
Dialog8 ConLrol4 Warning [\OKSLyle}1his is Lhe LexL Lo display.
Dialog8 ConLrol5 [\OKSLyle}[&OKSLyle}1his is Lhe LexL Lo display.
Dialog8 ConLrol6 [\OKSLyle 1his is Lhe LexL Lo display.
1exLSLyle Lable (parLial)
1exLSLyle
OkSLyle

lCF32 validaLes LhaL keys and oreign keys in Lhe .msi ile are o Lhe same size and column deiniLion Lypes. 1his
lCF cusLom acLion makes Lhe comparison using Lhe _validaLion Lable and using Lhe deiniLion Lypes LhaL are
reLurned by MsiViewGetCoIumnlnfo. For more inormaLion, see Column DeiniLion FormaL.
Result
lCF32 posLs errors i Lhe .msi ile conLains any oreign keys Lo keys o a dierenL column lengLh or column daLa
Lype.
Example
lCF32 posLs Lwo errors or Lhe example shown.
O 1here is a oreign key and key deined LhaL dier in size.
O 1here is a oreign key and key deined LhaL dier in Lheir deiniLion Lype.
_VaIidation TabIe partiaI)
1able Column Key1able KeyColumn
File version File
Flap Column8 Flap
CoIumn Definitions partiaI)
1able Column 1ype Size
File File s 72
File version S 32
Flap Column i 2
Flap Column8 S 32
1he version column o Lhe File Lable can be a oreign key Lo anoLher ile in Lhe File Lable. 1his occurs wiLh
companion iles. However, Lhe version column only allows a sLring lengLh 32, whereas Lhe File column allows a
sLring lengLh 72. 1o ix Lhis error change Lhe sLring lengLhs Lo maLch.
1here is a oreign key and key deined LhaL dier in Lheir deiniLion Lypes. Column8 o Lhe Flap 1able is lisLed as
a oreign key Lo Column. Column8 is a sLring column and Column is an inLeger column. 1he oreign key and
key pairs musL be deined so LhaL Lheir daLa Lypes maLch.

lCF33 processes enLries in Lhe RegisLry Lable and may issue a warning or each Lable enLry LhaL regisLers Classes,
Filename FxLensions, ProglDs, Shell verbs, RemoLe Server ApplDs, MlMF Lypes, or 1ypelibs. 1he warnings are
obsoleLe and can be ignored.
Related topics
lCF Reerence
Send commenLs abouL Lhis Lopic Lo MicrosoL
8uild daLe. 9/7/20

lCF34 validaLes LhaL each radio buLLon on every Radio8uLLonCroup ConLrol has a properLy in Lhe ProperLy
column o Lhe Radio8uLLon Lable LhaL speciies iLs radio buLLon group. lCF34 validaLes LhaL Lhis properLy exisLs
and is seL Lo a deaulL value in Lhe ProperLy Lable which is equal Lo one o Lhe group's radio buLLon values in Lhe
value column o Lhe Radio8uLLon Lable.
A radio buLLon group musL have a deaulL or users Lo be able Lo selecL a choice using Lhe 1A8 key. 1his is
required or proper user accessibiliLy.
lCF34 reporLs missing Lables.
Result
lCF34 posL an error message i Lhere is a radio buLLon LhaL speciies an invalid properLy.
Example
lCF34 reporLs Lhe ollowing errors or Lhe example shown.
lCF34 error DescripLion
ConLrol DialogA.ConLrol2 musL have a properLy
because iL is o Lype Radio8uLLonCroup.
1here is a Radio8uLLonCroup conLrol, wiLhouL Lhe lndirecL
conLrol biL seL in Lhe ALLribuLes column o Lhe ConLrol
Lable, LhaL does noL have a properLy lisLed in Lhe ProperLy
column.
Maybe is noL a valid deaulL value or Lhe
Radio8uLLonCroup using properLy ProperLy3. 1he
value musL be lisLed as an opLion in Lhe
Radio8uLLonCroup Lable.
1here is a deaulL value or a properLy speciied in Lhe
value column o Lhe ProperLy Lable LhaL is noL one o Lhe
values or Lhe radio buLLon group speciied in Lhe value
column o Lhe Radio8uLLon Lable.
ProperLy ProperLy8 musL be deined because iL is
an indirecL properLy o a Radio8uLLonCroup conLrol
DialogA.ConLrol4
1he properLy reerenced by Lhis Radio8uLLon group is an
indirecL properLy, and Lhe value o Lhe indirecL properLy is
noL one o Lhe choices or Lhe Radio8uLLon group.
Maybe is noL a valid deaulL value or Lhe properLy
ProperLyA. 1he properLy is an indirecL
Radio8uLLonCroup properLy o conLrol
DialogA.ConLrol5 (via properLy ProperLy5).
1he value o Lhe indirecL properLy reerenced via Lhe
conLrol is noL one o Lhe deaulL values or LhaL
Radio8uLLonCroup.
ControI TabIe partiaI)
Dialog ConLrol 1ype ALLribuLes ProperLy
DialogA ConLrol Radio8uLLonCroup 0 ProperLy
DialogA ConLrol2 Radio8uLLonCroup 0
DialogA ConLrol3 Radio8uLLonCroup 0 ProperLy3
DialogA ConLrol4 Radio8uLLonCroup 8 ProperLy4
DialogA ConLrol5 Radio8uLLonCroup 8 ProperLy5
!roperty TabIe partiaI)
ProperLy value
ProperLy es
ProperLy3 Maybe
ProperLy4 ProperLy8
ProperLy5 ProperLyA
ProperLyA Maybe
RadioButton TabIe partiaI)
ProperLy Order value
ProperLy es
ProperLy 2 Now
ProperLy2 es
ProperLy2 2 No
ProperLy3 es
ProperLy3 2 No
ProperLy4 es
ProperLy4 2 No
ProperLyA es
ProperLyA 2 No
ProperLy8 es
ProperLy8 2 No
1o ix Lhe errors reporLed by Lhis lCF, check Lhe ollowing.
O 1haL every Radio8uLLon conLrol enLry wiLhouL Lhe indirecL aLLribuLe seL has a properLy lisLed in Lhe
ProperLy column.
O 1haL every such properLy has aL leasL one corresponding enLry in Lhe Radio8uLLon Lable.
O 1haL every such properLy is deined in Lhe ProperLy Lable, wiLh a value LhaL is one o Lhe choices rom
Lhe Radio8uLLon Lable.
O 1haL every properLy reerenced in Lhe ProperLy column o a Radio8uLLon conLrol wiLh Lhe indirecL
aLLribuLe seL is deined in Lhe ProperLy Lable.

lCF35 validaLes LhaL componenLs conLaining compressed iles sLored in a cabineL ile are noL seL Lo run rom
source. WiLh Windows lnsLaller 2.0 or laLer, Lhis resLricLion has been removed.
lCF35 queries Lhe CabineL column o Lhe Media Lable Lo deLermine which iles are compressed and sLored in a
cabineL ile. lL queries Lhe File Lable Lo deLermine which componenLs conLain Lhese iles. Finally, iL checks Lhe
ComponenL Lable Lo deLermine wheLher Lhe run-rom-source biLs are seL in Lhe ALLribuLes column.
Result
lCF35 posLs an error message i Lhere is a compressed ile sLored in a cabineL ile belonging Lo a componenL
wiLh Lhe msidbComponenLALLribuLesSourceOnly biL seL in Lhe ALLribuLes column o Lhe ComponenL Lable. WiLh
Windows lnsLaller 2.0 or laLer, Lhis is changed rom an error Lo a warning message. A package LhaL supporLs
only Windows lnsLaller 2.0 and laLer has Lhe PlD_PACFCOUN1 properLy o Lhe Summary lnormaLion SLream seL
Lo a value o aL leasL 200.
lCF35 posLs warning message i Lhere is a compressed ile sLored in a cabineL ile belonging Lo a componenL
wiLh Lhe msidbComponenLALLribuLesOpLional biL seL in Lhe ALLribuLes column o Lhe ComponenL Lable. 1his
warning message has been removed wiLh Windows lnsLaller 2.0 and laLer.
l mulLiple iles in a componenL are in a cabineL ile, lCF35 reporLs errors or each ile LhaL has Lhe run rom
source biL seL.
Example
lCF35 reporLs Lhe ollowing errors and warnings or Lhe example shown using a version earlier Lhan Windows
lnsLaller version 2.0.
lCF35 Frror DescripLion
FRROR. ComponenL ComponenL3 cannoL be
Run From Source only, because iLs member
ile 'File3' is compressed.
1here is a compressed ile sLored in a cabineL ile and Lhis ile
belongs Lo a componenL wiLh Lhe SourceOnly biL seL in Lhe
ALLribuLes column o Lhe ComponenL Lable.
1o ix Lhis error change Lhe lower 2 biLs o ComponenL2's
ALLribuLes value Lo "00", meaning Local only, or remove File4
rom Lhe CA8 ile.
FRROR. ComponenL ComponenL3 cannoL be
Run From Source only, because iLs member
ile 'File3' is compressed.
1here is a compressed ile sLored in a cabineL ile and Lhis ile
belongs Lo a componenL wiLh Lhe SourceOnly biL seL in Lhe
ALLribuLes column o Lhe ComponenL Lable.
8ecause Lhe iles in a componenL do noL all have Lo originaLe
rom Lhe same media, lCF35 reporLs errors or each ile in Lhe
componenL LhaL is in a cabineL.
1o ix Lhis error change Lhe lower 2 biLs o ComponenL2's
ALLribuLes value Lo "00", meaning Local only, or remove File4
rom Lhe CA8 ile.
Media 1able (parLial)
DisklD LasLSequence CabineL
2
2 4 One.cab
3 5 #1wo.cab
File 1able (parLial)
File ComponenL_ Sequence
File ComponenL
File2 ComponenL2 2
File3 ComponenL2 3
File4 ComponenL3 4
File5 ComponenL3 5
ComponenL 1able (parLial)
ComponenL ALLribuLes
ComponenL 0
ComponenL2 2
ComponenL3
ShorLcuL 1able (parLial)
ShorLcuL lcon_
ShorLcuL lcon2
NoLe LhaL iles can also be marked as compressed using Lhe word Count 5ummary ProperLy o Lhe Summary
lnormaLion sLream.

lCF36 validaLes LhaL every icon in Lhe lcon Lable is lisLed aL leasL once in Lhe AR!!RODUCTlCON properLy or
Lhe Class, Progld, or ShorLcuL Lables.
During adverLisemenL, Lhe insLaller insLalls all Lhe icons lisLed in Lhe lcon Lable on Lhe user's compuLer. Having
unused icons in Lhe lcon Lable does noL prevenL Lhe insLallaLion rom running, however iL does unnecessarily
increase Lhe size o Lhe .msi ile and Lhe Lime and space required Lo adverLise a eaLure.
l an icon is noL reerenced in Lhe properLy or Lable and Lhere is no Ul provided Lo creaLe a reerence aL run
Lime, you should remove Lhe icon Lo achieve beLLer perormance.
Result
lCF36 posLs a message i Lhere is a icon in Lhe lcon Lable LhaL is noL reerenced in Lhe Class, Progld, or ShorLcuL
Lables and i Lhere is no Ul provided Lo creaLe such a reerence aL run Lime.
Example
lCF36 reporLs Lhe ollowing error or Lhe example shown.
Copy
1con 81oat. 1con 1con4 s not used n the C1ass, Shortcut, or rog10 tab1e. 1hs
adverse1y a11ects per1ormance.
lcon 1able (parLial)
Name DaLa
lcon ConLrol
lcon2 ConLrol2
lcon3 ConLrol3
lcon4 ConLrol4
ProglD 1able (parLial)
ProglD
ProperLy
Class 1able (parLial)
CLSlD
[3F469A8A-3644-d2-8892-00A0C98805}
ShorLcuL 1able (parLial)
ShorLcuL lcon_
ShorLcuL lcon2

%
lCF38 validaLes LhaL every componenL being insLalled under Lhe currenL user's proile also speciies a regisLry
key under Lhe Y_CURRNT_U5R rooL in Lhe KeyPaLh column o Lhe ComponenL Lable.
Result
lCF38 posLs an error i a componenL insLalled under Lhe user's proile does noL speciy a HKCU regisLry key.
Example
lCF38 reporLs Lhe ollowing errors or Lhe sample shown.
lCF38 error DescripLion
ComponenL ComponenL
insLalls Lo user proile. lL musL
use a regisLry key under HKCU
as iLs KeyPaLh, noL a ile.
1he value o Lhe aLLribuLes column o ComponenL is 0, meaning LhaL Lhe
componenL musL use a ile as iLs KeyPaLh. 1his causes diiculLies when
mulLiple users insLall Lhe componenL on Lhe same compuLer.
1o ix Lhis error on ComponenL, seL Lhe RegisLryKeyPaLh biL in Lhe ALLribuLes
column o Lhe ComponenL Lable and change Lhe enLry in Lhe KeyPaLh column
Lo a value lisLed in Lhe RegisLry column o Lhe RegisLry Lable.
ComponenL ComponenL2
insLalls Lo user proile. lL musL
use a regisLry key under HKCU
as iLs KeyPaLh. 1he KeyPaLh is
currenLly NULL.
ComponenL2 has Lhe RegisLryKeyPaLh biL seL in Lhe ALLribuLes column o Lhe
ComponenL Lable. 1he KeyPaLh ield musL Lhereore conLain a key Lo Lhe
RegisLry column o Lhe RegisLry 1able buL Lhe KeyPaLh column is Null.
1o ix Lhis error, change Lhe KeyPaLh value Lo a valid enLry inLo Lhe RegisLry
Lable.
ComponenL ComponenL3
insLalls Lo user proile. lL's
KeyPaLh regisLry key musL all
under HKCU.
ComponenL3 has Lhe RegisLryKeyPaLh biL seL in Lhe ALLribuLes column o Lhe
ComponenL Lable buL Lhe rooL o Lhe regisLry enLry speciied in Lhe RooL
column o Lhe RegisLry Lable speciies Y_LOCAL_MAClN raLher Lhan
Y_CURRNT_U5R.
1o ix Lhis error, use a valid regisLry enLry under Y_LOCAL_MAClN as
Lhe KeyPaLh or Lhis componenL or change Lhe value in Lhe RooL column o
Lhe RegisLry Lable Lo - or .
1he KeyPaLh regisLry enLry or
componenL ComponenL4 does
noL exisL.
ComponenL4 has Lhe RegisLryKeyPaLh biL seL in Lhe ALLribuLes column o Lhe
ComponenL Lable buL Lhe enLry in Lhe KeyPaLh column does noL exisL in Lhe
RegisLry 1able.
1o ix Lhis error, add an enLry or Reg4 Lo Lhe RegisLry Lable LhaL is a under
Y_CURRNT_U5R.
1he RegisLry FnLry Reg5 is seL
as Lhe KeyPaLh or componenL
ComponenL5, buL LhaL regisLry
enLry does noL belong Lo
ComponenL5.
1he RegisLry enLry reerenced in Lhe KeyPaLh column o Lhe componenL was
ound and lies under Lhe HKCU Lree, buL Lhe regisLry enLry's ComponenL_
column does noL reer back Lo Lhe same componenL LhaL lisLed iL as Lhe
KeyPaLh. 1his means LhaL Lhe regisLry enLry used as Lhe KeyPaLh o Lhe
componenL would only be creaLed when some oLher componenL was
insLalled.
1o ix Lhis error change Lhe KeyPaLh value Lo reer Lo a regisLry enLry LhaL
belongs Lo Lhe componenL, or change Lhe regisLry enLry Lo belong Lo Lhe
componenL using iL as a KeyPaLh.
DirecLory 1able (parLial)
DirecLory DirecLory_ParenL DeaulLDir
Dir SLarLMenuFolder
Dir2 DeskLopFolder
Dir3 Dir3 AppDaLa
Dir4 Dir3 SubDir
ComponenL 1able (parLial)
ComponenL DirecLory_ ALLribuLes KeyPaLh
ComponenL Dir 0 File
ComponenL2 Dir2 4
ComponenL3 Dir3 4 Reg3
ComponenL4 Dir4 4 Reg4
ComponenL5 Dir5 4 Reg5
RegisLry 1able (parLial)
RegisLry RooL value ComponenL_
Reg3 2 ComponenL3
Reg5 0 ComponenL4

%
lCF39 validaLes Lhe Summary lnormaLion SLream o Lhe daLabase.
lCF39 checks Lhe ormaL o Lhe ollowing properLies.
O word Count 5ummary
O !age Count 5ummary
O TempIate 5ummary
O Revision Number 5ummary
O Create Time/Date 5ummary
O Last 5aved Time/Date 5ummary
O Last !rinted 5ummary
l Lhe word Count 5ummary ProperLy speciies LhaL Lhe source is compressed, lCF39 posLs a warning i any
iles are also marked as compressed in Lhe ALLribuLes column o Lhe File Lable. See Using CabineLs and
Compressed Sources.
lCF39 posLs a warning i Lhe word Count 5ummary ProperLy speciies LhaL Lhe package is UAC complianL and
Lhe MsiPackageCerLiicaLe 1able is noL empLy

lCF40 does miscellaneous validaLion.


Result
lCF40 posLs warnings on Lhe ollowing.
O 1he RlN5TALLMOD properLy has been overridden.
O 1he RemovelniFile Lable has a DeleLe 1ag enLry wiLh no value.
O 1he .msi ile is missing Lhe Frror Lable and Lhe !age Count 5ummary ProperLy is less Lhan or equal Lo
00. 1his lCF warning is obsoleLe because Windows lnsLaller does noL require Lhe package Lo have an
Frror Lable. Frror messages can be reLrieved using Msimsg.dll.
Example
ProperLy 1able
ProperLy value
RlN5TALLMOD A
RemovelniFile 1able
RemovelniFile AcLion value
RlN5TALLMOD 4
Results
lCF40 would reporL Lhe ollowing errors.
lCF40 error DescripLion
RlN5TALLMOD is deined in Lhe
ProperLy Lable. 1his may cause
diiculLies.
Deining Lhe RlN5TALLMOD properLy in .msi ile can lead Lo
unexpecLed behavior.
1o ix Lhis error, do noL deine Lhis properLy.
RemovelniFile enLry Remove musL
have a value, because Lhe AcLion is
"DeleLe 1ag" (4).
1here is a DeleLe 1ag acLion in Lhe in Lhe RemovelniFile column o Lhe
RemovelniFile Lable wiLhouL speciying a Lag Lo deleLe in Lhe value
column.
Frror 1able is missing. Only numerical
error messages will be generaLed.
1his lCF warning is obsoleLe because Windows lnsLaller does noL
require Lhe package Lo have an Frror Lable. Frror messages can be
reLrieved using Msimsg.dll.
1his warning means LhaL Lhe .msi ile is missing Lhe Frror Lable and Lhe
!age Count 5ummary ProperLy is less Lhan or equal Lo 00.
1o ix Lhis error, use a currenL version o Lhe Windows lnsLaller, or add
an Frror Lable Lo Lhe insLallaLion package and auLhor ormaLLing
LemplaLes in Lhe Message column or error messages.

lCF4 validaLes LhaL Lhe enLries in Lhe Class and FxLension Lables reer Lo enLries in Lhe ComponenL Lable LhaL
implemenL Lhe class objecL or exLension o Lhe componenL.
Result
lCF4 posLs an error i Lhere is a eaLure LhaL does noL conLain Lhe componenL implemenLing Lhe class objecL or
exLension.
Example
lCF4 reporLs Lhe ollowing errors or Lhe example shown.
lCF4 error DescripLion
Class [00000000-0000-0000-0000-
0000000000000} reerences eaLure FeaLure2 and
componenL ComponenL, buL Lhe LhaL ComponenL
is noL associaLed wiLh LhaL FeaLure in Lhe
FeaLureComponenLs Lable.
1here is a eaLure LhaL does noL conLain Lhe componenL
implemenLing Lhe class objecL. 1his means LhaL Lhe
insLaller does noL insLall Lhe componenL wiLh Lhe eaLure
and LhaL adverLising may noL work as expecLed.
1o ix Lhis error, change Lhe enLry in Lhe FeaLure_ column
o Lhe Class Lable enLry Lo reerence a eaLure LhaL insLalls
componenL lisLed in Lhe ComponenL_ column or change
Lhe eaLure and componenL associaLed in Lhe
FeaLureComponenLs Lable.
FxLension .yip reerences eaLure FeaLure and
componenL ComponenL2, buL Lhe LhaL ComponenL
is noL associaLed wiLh LhaL FeaLure in Lhe
FeaLureComponenLs Lable.
1here is a eaLure LhaL does noL conLain Lhe componenL
implemenLing Lhe exLension. 1his means LhaL Lhe insLaller
does noL insLall Lhe componenL wiLh Lhe eaLure and LhaL
adverLising may noL work as expecLed.
1o ix Lhis error, change Lhe enLry in Lhe FeaLure_ column
o Lhe FxLension Lable enLry Lo reerence a eaLure LhaL
insLalls Lhe componenL lisLed in Lhe ComponenL_ column
or change Lhe eaLure and componenL associaLed in Lhe
FeaLureComponenLs Lable.
leatureComponents TabIe partiaI)
FeaLure_
FeaLure
FeaLure2
CIass TabIe partiaI)
CLSlD ComponenL_ FeaLure_
[00000000-0000-0000-0000-000000000000} ComponenL FeaLure2
CIass TabIe partiaI)
FxLension ComponenL_ FeaLure_
.yip ComponenL2 FeaLure

lCF42 validaLes LhaL lnProc servers are noL linked Lo FXF iles in Lhe Class Lable. lL also validaLes LhaL only
LocalServer and LocalServer32 classes have argumenLs and DelnProc values.
Result
lCF42 posLs an error i Lhere are lnProc servers linked Lo FXF iles in Lhe Class Lable.
Example
lCF42 would reporL Lhe ollowing errors or Lhe example shown.
lCF42 error DescripLion
CLSlD '[CUlD}' is an lnProc server, buL Lhe implemenLing
componenL 'ComponenL' has an FXF ('LesL.exe') as iLs
KeyFile.
1here is an execuLable ile speciied as an lnProc
server. FXF iles cannoL be lnProc servers.
CLSlD '[CUlD}' in conLexL 'lnProcServer32' has an
argumenL. Only LocalServer conLexLs can have
argumenLs.
1o ix Lhis error, remove Lhe argumenL.
CLSlD '[CUlD}' in conLexL 'lnProcServer32' species a
deaulL lnProc value. Only LocalServer conLexLs can have
deaulL lnProc values.
1here is an objecL wiLh a deaulL lnProc value LhaL is
noL an objecL operaLing in Lhe LocalServer or
LocalServer32 conLexLs.
1o ix Lhis error, remove Lhe DelnProc value or
change Lhe conLexL o Lhe class.
CIass TabIe partiaI)
CLSlD ConLexL ComponenL_ DelnProcHandler ArgumenL
[CUlD} lnProcServer32 ComponenL lnProcServer Arg
Component TabIe partiaI)
ComponenL KeyPaLh
ComponenL File
liIe TabIe partiaI)
File Filename
File LesL.exe

lCF43 validaLes LhaL shorLcuLs LhaL do noL reerence a eaLure as Lheir 1argeL (non-adverLised shorLcuLs) are in
componenLs having a HKCU regisLry enLry as Lheir key paLh.
Result
lCF43 posLs an error message i a non-adverLised shorLcuL is in a componenL LhaL does noL have a HKCU
regisLry enLry as iLs key paLh.
Example
lCF43 would reporL Lhe ollowing errors or Lhe example shown.
lCF43 error DescripLion
ComponenL ComponenL has
non-adverLised shorLcuLs. lL musL
use a regisLry key under HKCU as
iLs KeyPaLh, noL a ile.
1he aLLribuLes column o ComponenL is 0, meaning LhaL Lhe componenL
uses a ile as iLs KeyPaLh. 1his causes non-adverLised shorLcuLs in Lhis
componenL Lo be insLalled or Lhe irsL user on Lhe compuLer ONL. Users
who insLall Lhe componenL laLer do noL see Lhe shorLcuLs because Lhe
componenL appear Lo Lhe insLaller as already exisLing on Lhe compuLer.
1o ix Lhis error, seL Lhe RegisLryKeyPaLh biL o Lhe aLLribuLes Lo swiLch Lhe
ComponenL Lo a RegisLry enLry, Lhen change Lhe KeyPaLh value Lo a valid
enLry in Lhe RegisLry Lable.
ComponenL ComponenL2 has
non-adverLised shorLcuLs. lL musL
use a regisLry key under HKCU as
iLs KeyPaLh. 1he KeyPaLh is
currenLly null.
1he ALLribuLes column is seL Lo use Lhe regisLry, buL Lhe KeyPaLh is null.
1he KeyPaLh musL reer Lo an enLry in Lhe RegisLry 1able.
1o ix Lhis error, change Lhe KeyPaLh value Lo a valid enLry in Lhe RegisLry
Lable.
ComponenL ComponenL3 has
non-adverLised shorLcuLs. lLs
KeyPaLh regisLry key musL all
under HKCU.
1he ALLribuLes column is seL Lo use Lhe regisLry, buL Lhe reerenced regisLry
enLry is noL under HKCU.
1o ix Lhis error, eiLher swiLch Lo a dierenL regisLry enLry as Lhe KeyPaLh
or Lhis componenL, or change Lhe RooL value o Lhe RegisLry enLry Lo
eiLher - or .
1he KeyPaLh regisLry enLry or
componenL ComponenL4 does noL
exisL.
1he RegisLry enLry reerenced in Lhe KeyPaLh column o Lhe componenL is
noL in Lhe RegisLry 1able.
1o ix Lhis error, creaLe an enLry.
1he RegisLry FnLry Reg5 is seL as
Lhe KeyPaLh or componenL
ComponenL5, buL LhaL regisLry
enLry does noL belong Lo
ComponenL5.
1here is a RegisLry enLry reerenced in Lhe KeyPaLh column o Lhe
componenL LhaL lies under Lhe HKCU Lree, buL Lhe regisLry enLry's
ComponenL_ column does noL reer back Lo Lhe same componenL LhaL
lisLed iL as Lhe KeyPaLh. 1his means LhaL Lhe regisLry enLry used as Lhe
KeyPaLh o Lhe componenL is only creaLed i some oLher componenL was
insLalled.
1o ix Lhis error, change Lhe KeyPaLh value Lo reer Lo a regisLry enLry LhaL
belongs Lo Lhe componenL or change Lhe regisLry enLry Lo belong Lo Lhe
componenL using iL as a KeyPaLh.
Component TabIe partiaI)
ComponenL ALLribuLes KeyPaLh
ComponenL 0 File
ComponenL2 4
ComponenL3 4 Reg3
ComponenL4 4 Reg4
ComponenL5 4 Reg5
Registry TabIe partiaI)
RegisLry RooL value ComponenL_
Reg3 2 ComponenL3
Reg5 0 ComponenL4

lCF44 validaLes LhaL Lhe NewDialog, SpawnDialog, and SpawnWaiLDialog ConLrolFvenLs reerence valid dialog
boxes in Lhe Dialog Lable.
Result
lCF44 posLs an error message i Lhere is a dialog conLrol evenL LhaL does noL reerence a dialog box lisLed in Lhe
Dialog Lable.
Example
lCF44 would reporL Lhe ollowing errors or Lhe example shown.
lCF44 error DescripLion
ConLrol FvenL or ConLrol 'Dialog'.'ConLrol' is o
Lype SpawnDialog, buL iLs argumenL Dialog2 is noL a
valid enLry in Lhe Dialog 1able.
1here is a SpawnDialog, SpawnWaiLDialog, or
NewDialog acLions LhaL has an argumenL LhaL does noL
reer Lo a dialog box in Lhe Dialog Lable.
1o ix Lhis error, add an argumenL LhaL is a key in Lhe
Dialog 1able.
DiaIog TabIe partiaI)
Dialog 1iLle
Dialog
ControIvent TabIe partiaI)
Dialog_ ConLrol_ 1ype ArgumenL
Dialog ConLrol SpawnDialog Dialog2

lCF45 validaLes LhaL biL ield columns in Lhe daLabase do noL seL any reserved biLs Lo .
Reserved biLs provide no uncLionaliLy in currenL versions o Lhe insLaller, buL mighL in uLure versions. 1hey
should be seL Lo 0 Lo be compaLible wiLh uLure versions o Windows lnsLaller.
Result
lCF45 posLs an error message i any o Lhe ollowing Lables conLains a biL ield wiLh a reserved biL seL Lo a value
o .
O 88ConLrol Lable
O Dialog Lable
O FeaLure Lable
O File Lable
O MoveFile Lable
O ModuleConiguraLion Lable
O OD8CDaLaSource Lable
O PaLch Lable
O RemoveFile Lable
O ServiceConLrol Lable
O ServicelnsLall Lable
O 1exLSLyle Lable
lCF45 posLs one o Lwo warning messages i Lhe ConLrol 1able conLains a biL ield wiLh a reserved biL seL Lo a
value o .
Example
lCF45 reporLs Lhe ollowing error or Lhe example shown.
Copy
8ow 'I1e' n tab1e 'I1e' has bts set n the '^ttrbutes'
co1umn that are reserved. 1hey must be to ensure
compatb1ty wth 1uture nsta11er versons.
lCF45 reporLs Lhe ollowing warning or Lhe example shown.
Copy
8ow '0a1og.Ldt' n tab1e 'Contro1' has bts set n the '^ttrbute'
co1umn that are reserved. 1hey shou1d be to ensure compatb1ty
wth 1uture nsta11er versons.
File 1able (parLial)
File ALLribuLes
File 28
ConLrol 1able (parLial)
Dialog ConLrol ALLribuLes
Dialog FdiL 209752
Dialog FdiL2 048576

lCF46 checks or cusLom properLies in condiLions, ormaLLed LexL, and oLher locaLions LhaL dier rom a sysLem
deined properLy only by Lhe case o one or more characLers.
Result
lCF46 posLs an inormaLional message i Lhere is a cusLom properLy in a condiLion, ormaLLed LexL, and oLher
locaLion LhaL diers rom a sysLem deined properLies only in Lhe case o one or more characLers.
Example
lCF46 reporLs Lhe ollowing errors or Lhe example shown.
lCF46 error DescripLion
ProperLy ReinsLallMode deined in properLy Lable
diers rom anoLher deined properLy only by case.
1he sysLem deined properLy name RlN5TALLMOD
diers rom Lhe cusLom properLy by case only.
ProperLies are case sensiLive, so cusLom properLy is
noL Lhe same as Lhe sysLem properLy. 1his is a
common cause o errors.
ProperLy 'MyproperLy' reerenced in column
'lnsLallFxecuLeSequence'.'CondiLion' o row
'lnsLallFinalize' diers rom a deined properLy by case
only.
1he properLy Lable deines Lhe Lable MyProperLy, buL
Lhe reerenced properLy is MyproperLy. ProperLies are
case sensiLive, so Lhe Lwo properLies are NO1 Lhe
same. 1his is a common cause o errors.
!roperty TabIe
ProperLy value
ReinsLallMode omus
MyProperLy a value
lnstaIIxecute5equence TabIe partiaI)
AcLion CondiLion
lnsLallFinalize MyproperLy

lCF47 checks Lhe FeaLure and FeaLureComponenLs Lables or eaLures wiLh 600 or more componenLs.
Result
lCF47 posLs an error message i a eaLure exceeds Lhe maximum limiL o 600 componenLs per eaLure.
Example
lCF47 would reporL Lhe ollowing warning.
Copy
Ieature 'Ieature' has 6 components. 1hs cou1d cause
prob1ems on Wnx systems. You shou1d try to have 1ess
than 8 components per 1eature."
leature TabIe partiaI)
FeaLure
FeaLure
leatureComponents TabIe partiaI)
AcLion CondiLion
FeaLure ComponenL
FeaLure ComponenL600
1o ix Lhis warning, Lry spliLLing Lhe eaLure inLo several eaLures
%
lCF48 checks or direcLories LhaL are hard-coded Lo local paLhs in Lhe ProperLy Lable.
Do noL hard-code direcLory paLhs Lo local drives because compuLers dier in Lhe seLup o Lhe local drive. 1his
pracLice may be accepLable i deploying an applicaLion Lo a large number o compuLers on which Lhe relevanL
porLions o Lhe drives are all Lhe same.
Result
lCF48 posLs an error message i Lhere is a direcLory LhaL is hard-coded Lo a local paLh in Lhe ProperLy Lable.
Example
lCF48 would reporL Lhe ollowing warning or Lhe example shown.
Copy
0rectory '0r' appears to be hardcoded n the property
tab1e to a 1oca1 drve.
Directory TabIe partiaI)
DirecLory DirecLory_ParenL DeaulLDir
Dir SourceDir
!roperty TabIe partiaI)
ProperLy value
Dir d.\source

%
lCF49 checks or deaulL regisLry enLries LhaL are noL a RG_5Z Lype.
Result
lCF49 posLs an warning i Lhere is a deaulL regisLry enLry LhaL is noL a RG_5Z Lype.
Example
lCF49 reporLs Lhe ollowing warning or Lhe example shown.
Copy
8eg Lntry '8eg' s not o1 type 8L6_S2. 0e1au1t types must be 8L6_S2
on WnS Systems. Make sure the component s condtona1zed
to never be nsta11ed on WnS machnes.
1he value '#23' is a DwORD regisLry value.
RegisLry 1able (parLial)
RegisLry Name value
Reg #23
1o ix Lhis warning, change Lhe value Lo Lype RG_5Z.
ComponenLs wiLh non-RG_5Z are valid.

lCF50 checks LhaL shorLcuL icons are speciied Lo display correcLly and maLch Lheir LargeL ile's exLension.
Result
lCF50 posLs an error message i Lhe exLension o Lhe icon and LargeL iles do noL maLch. lCF50 posLs a warning i
icons are sLored in iles LhaL do noL have an .exe or .ico exLension.
Example
lCF50 reporLs Lhe ollowing error or Lhe example shown.
lCF50 error or warning DescripLion
1he exLension o lcon 'lcon2.daL' or ShorLcuL
'ShorLcuL2' does noL maLch Lhe exLension o Lhe Key
File or componenL 'ComponenL2'.
l Lhe exLensions o Lhe icon and Lhe LargeL ile do noL
maLch, Lhe shorLcuL will noL have Lhe correcL conLexL
menu when Lhe componenL is adverLised.
1o ix Lhis error, rename Lhe icon Lo maLch Lhe exLension
o Lhe LargeL ile.
1he exLension o lcon 'lcon.baL' or ShorLcuL
'ShorLcuL' is noL "exe" or "ico". 1he lcon will noL be
displayed correcLly.
NoL all versions o Lhe shell correcLly display icons
sLored in iles LhaL do noL have exLensions o "exe" or
"ico".
1o ix Lhis warning, rename Lhe icon have an exLension
o "exe" or "ico".
liIe TabIe partiaI)
File FileName
File File.baL
File2 File2.pl
leature TabIe partiaI)
FeaLure
FeaLure
Component TabIe partiaI)
ComponenL KeyPaLh
ComponenL File
ComponenL2 File2
lcon TabIe
Name DaLa
lcon.baL [8inary DaLa]
lcon2.daL [8inary DaLa]
5hortcut TabIe partiaI)
ShorLcuL ComponenL 1argeL lcon_
ShorLcuL ComponenL FeaLure lcon.baL
ShorLcuL2 ComponenL2 FeaLure lcon2.daL

lCF5 checks LhaL a LiLle has been provided or onL resource iles.
ou musL provide a LiLle or a onL resource LhaL does noL have an embedded name. Only .LLc, .LL, and .oL onL
resource iles do noL require a LiLle, because Lhese iles conLain an embedded name. Do noL provide a LiLle or a
onL resource LhaL conLains an embedded name because Lhe sysLem Lhen regisLers Lhe onL Lwice.
windows lnstaIIer 4.5 and earIier. lCF5 does noL check .oL onL resource iles.
Result
lCF5 posLs an error i Lhere are any .LLc, .LL, and .oL onL resource iles wiLh LiLles. lCF5 posLs a warning i Lhere
are any oLher onL resource iles wiLhouL a LiLle.
Example
lCF5 would reporL Lhe ollowing warning or Lhe example shown.
Copy
Iont 'Iont' s a 11C\11I\01I 1ont, but a1so has a tt1e.
lCF5 would reporL Lhe ollowing error message or Lhe example shown.
Copy
Iont 'Iont' does not have a tt1e. 0n1y 11C\11I\01I 1onts do not need tt1es.
liIe TabIe partiaI)
File FileName
FonL onL.LL
FonL2 onL2.on
lont TabIe
File_ FonL1iLle
FonL A Really Cool FonL
FonL2

lCF52 checks or privaLe properLies in Lhe AppSearch Lable. See AbouL ProperLies.
When using Windows 2000 all properLies seL in Lhe ProperLy column o Lhe AppSearch Lable musL be public
properLies.
Result
lCF52 posLs a warning i Lhere is a privaLe properLy in Lhe AppSearch Lable.
Example
lCF52 posLs Lhe ollowing warning or Lhe example shown.
Copy
roperty 'roperty' n ^ppSearch row 'roperty'.'Sgnature'
s not pub1c. 1t shou1d be a11 uppercase.
App5earch TabIe
ProperLy SignaLure
PROPFR1 SignaLure
ProperLy2 SignaLure2
1o ix Lhis warning change Lo Lhe cusLom public properLy. PROPFR12.

lCF53 checks or enLries in Lhe RegisLry Lable LhaL wriLe privaLe insLaller inormaLion or policy values Lo Lhe
sysLem regisLry.
Result
lCF53 posLs a warning i Lhe RegisLry Lable speciies wriLing inLernal or policy inormaLion Lo Lhe regisLry.
Example
lCF53 posLs Lhe ollowing warning or Lhe example shown.
Copy
8egstry key '8egstry' wrtes 1nsta11er nterna1 or po1cy n1ormaton.
RegisLry 1able (parLial)
RegisLry RooL Key
RegisLry 5oftware\!oIicies\Microsoft\windows\lnstaIIer\DisabIeRoIIback
RegisLry Lable row 'RegisLry' wriLes a sysLem policy value in Lhe regisLry LhaL aecLs Lhe insLallaLion o all
packages. Depending on Lhe package, iL may be possible Lo disable rollback or Lhis package alone by seLLing
Lhe Dl5ABLROLLBAC properLy in Lhe ProperLy Lable. See Rollback lnsLallaLion.

lCF54 checks or componenLs LhaL use a companion ile as Lheir key paLh.
1he key paLh ile o a componenL musL noL derive iLs version rom a dierenL ile. 1his can cause some iles Lo
ail Lo insLall. See Lhe File Lable or more inormaLion abouL companion iles.
Result
lCF54 posLs a warning i any componenL has a key paLh ile LhaL derives iLs version rom anoLher ile.
Example
lCF54 reLurns Lhe ollowing warning or Lhe example shown.
Copy
Component 'Component' uses 11e 'I1e' as ts keyath, but the 11e's verson s
provded by the 11e 'I1e'.
Component TabIe partiaI)
ComponenL ALLribuLe KeyPaLh
ComponenL 0 File
liIe TabIe partiaI)
File version Language
File File2
File2 .0.0.0 033

lCF55 validaLes LhaL all LockPermission objecLs exisL and have valid permission values.
Result
lCF55 posL an error i a LockObjecL lisLed in Lhe LockPermissions Lable does noL exisL or i no privilege level is
speciied in Lhe Permission column.
Example
lCF55 would reporL Lhe ollowing errors or Lhe example.
Copy
ock0bect 'I1e'.'I1e'.''.'guest' n the ockermssons tab1e
has a nu11 ermsson va1ue.
Cou1d not 1nd tem 'I1e2' n tab1e 'I1e' whch s re1erenced
n the ockermssons tab1e.
Lock!ermissions TabIe partiaI)
LockObjecL 1able Domain User Permission
File File guesL
File3 File guesL
liIe TabIe partiaI)
File version Language
File File2
File2 .0.0.0 033
1he objecL File has a null in Lhe Permission column. Fach row musL have a value in Lhe Permissions column. 1o
ix Lhis error speciy a numeric value in Lhis column. l no privileges are needed or Lhis objecL Lhen you should
remove Lhe row.
1he objecL File3 described in Lhe LockPermissions Lable is noL lisLed in Lhe File Lable. 1o ix Lhis error reer Lo a
valid objecL.

lCF56 validaLes LhaL Lhe direcLory sLrucLure o Lhe .msi ile has a single rooL direcLory, LhaL Lhe rooL is Lhe
TARGTDlR properLy, and LhaL Lhe 5ourceDir properLy value is in Lhe DeaulLDir column o Lhe DirecLory Lable.
l a .msi ile has mulLiple rooLs or speciies a rooL oLher Lhan TARGTDlR, an adminisLraLive insLallaLion does noL
creaLe a correcL adminisLraLive image.
NoLe LhaL empLy direcLories are noL checked by lCF56. 1he direcLory sLrucLure passes validaLion wiLh mulLiple
rooL direcLories i Lhe exLra direcLories are empLy.
Result
lCF56 posLs an error i Lhe .msi does noL have a single rooL, TARGTDlR, or i 5ourceDir is noL speciied in Lhe
DeaulLDir column o Lhe DirecLory Lable.
Example
lCF56 reporLs Lhe ollowing errors or Lhe example shown.
Copy
0rectory '1^86L1018' has a bad 0e1au1t0r va1ue.
0rectory '8oot' s an nva1d root 0rectory.
DirecLory 1able
DirecLory DirecLory_ParenL DeaulLDir
1ARCF1DlR 1emp
RooL2 RooL2 SourceDir
1o ix Lhe irsL error, Lhe TARGTDlR rooL should have a DeaulLDir value o 5ourceDir. SOURCFDlR is also
accepLed. lL may be possible Lo make TARGTDlR Lhe parenL o Lhe second rooL, and use Lhe '.' value in Lhe
DeaulLDir column. See Lhe DirecLory Lable or more inormaLion.
1o ix Lhe second error, Lhe DirecLory sLrucLure should have only one rooL called TARGTDlR.

lCF57 validaLes LhaL individual componenLs do noL mix per-machine and per-user daLa. 1his lCF cusLom acLion
checks regisLry enLries, iles, direcLory key paLhs, and non-adverLised shorLcuLs.
Mixing per-user and per-machine daLa in Lhe same componenL could resulL in only parLial insLallaLion o Lhe
componenL or some users in a mulLi-user environmenL.
See Lhe ALLU5R5 properLy.
Result
lCF57 posLs an error i iL inds any componenL LhaL conLains boLh a per-machine and per-user regisLry enLries,
iles, direcLory key paLhs, or non-adverLised shorLcuLs.
Example
lCF57reporLs Lhe ollowing errors or Lhe example shown.
Copy
Component 'Component' has both per-user and per-machne
data wth a per-machne keyath.

W^8u1u6: Component 'Component' has both per-user and
per-machne data wth an ukCu 8egstry keyath.

Component 'Component2' has a regstry entry that
can be ether per-user or per-machne and a per-machne keyath.

Component 'Component4' has both per-user data and
a keypath that can be ether per-user or per-machne.
ComponenL 1able (parLial)
ComponenL DirecLory ALLribuLes KeyPaLh
ComponenL DirecLoryA 0 FileA
ComponenL2 DirecLoryA 4 RegKey8
ComponenL3 DirecLoryA 0 FileC
ComponenL4 DirecLoryA 4 RegKeyD
RegisLry 1able (parLial)
RegisLry RooL ComponenL_
RegKeyA ComponenL
RegKey8 ComponenL2
RegKeyC - ComponenL3
RegKeyD - ComponenL4
File 1able (parLial)
File ComponenL_
FileA ComponenL
File8 ComponenL2
FileC ComponenL3
FileD ComponenL4
DirecLory 1able
DirecLory DirecLory_ParenL DeaulLDir
1ARCF1DlR SourceDir
DirecLoryA 1ARCF1DlR DirecLoryA
1o ix Lhe errors, reorganize Lhe applicaLion such LhaL each componenL conLains only per-user or per-machine
resources, and noL boLh.
1he irsL error message is posLed because ComponenL conLains FileA (per-machine) and Lhe HKCU regisLry key
RegKeyA (per user).
%
lCF58 checks LhaL your Media Lable does noL have more Lhan 80 rows.
Result
Warnings reporLed by lCF58 cause Lhe insLallaLion Lo ail unless Lhe package is insLalled wiLh Windows lnsLaller
2.0 or laLer. 8eginning wiLh Windows lnsLaller 2.0, Lhe resLricLion Lo more Lhan 80 media Lable enLries is
removed. No warning is issued i Lhe package's !age Count 5ummary ProperLy is greaLer Lhan or equal Lo 50.
Packages o schema 200 or higher can only be insLalled by Windows lnsLaller 2.0 or laLer.
Example
lCF58 reporLs Lhe ollowing errors and warnings or Lhe example shown.
Copy
1hs package has 8 meda entres. ackages are 1mted to 8 entres n the meda
tab1e.
1o ix Lhis error, eliminaLe any unused media Lable enLries, consolidaLe media Lable enLries LhaL reer Lo Lhe
same media, and repackage your applicaLion Lo reduce Lhe media required.
Media 1able (parLial)
Diskld LasLSequence_
0
2 20
... ...
8 80

%
lCF59 checks LhaL adverLised shorLcuLs belong Lo componenLs LhaL are insLalled by Lhe LargeL eaLure o Lhe
shorLcuL.
Frrors reporLed by lCF59 generally lead Lo Lhe ollowing behavior.
. 1he adverLised shorLcuL will launch Lhe Windows lnsLaller Lo insLall Lhe eaLure lisLed in Lhe 1argeL
column.
2. 8uL because Lhe FeaLureComponenLs Lable does noL map Lhe LargeL eaLure Lo Lhe componenL
conLaining Lhe shorLcuL, Lhe keyile o Lhe componenL (which is acLivaLed by Lhe shorLcuL) is noL
insLalled.
3. 1hereore Lhe shorLcuL is broken and will noL do anyLhing.
Result
lCF59 posLs an error i an adverLised shorLcuL does noL belong Lo Lhe componenLs LhaL are insLalled by Lhe
LargeL eaLure o Lhe shorLcuL.
Example
lCF59 reporLs Lhe ollowing error or Lhe example shown.
Copy
1he shortcut Shortcut8 actvates component Component8 and advertses 1eature
Ieature^, but there s no mappng between Ieature^ and Component8 n the
IeatureComponents tab1e.
ln Lhis case, ShorLcuL8 adverLises FeaLureA, and when acLivaLed, sLarLs Lhe key ile o ComponenL8. eL
ComponenL8 is never insLalled by FeaLureA, so even aLer Lhe insLallaLion-on-demand phase compleLes, Lhe
LargeL o Lhe shorLcuL does noL exisL.
1o ix Lhis error, add a row Lo Lhe FeaLureComponenLs Lable LhaL associaLes FeaLureA and ComponenL8.
5hortcut TabIe partiaI)
ShorLcuL 1argeL ComponenL_
ShorLcuL8 FeaLureA ComponenL8
leatureComponents TabIe
FeaLure_ ComponenL_
FeaLureA ComponenLA
leature TabIe partiaI)
FeaLure Level
FeaLureA 0
Component TabIe partiaI)
ComponenL KeyPaLh
ComponenLA FileA
ComponenL8 File8
liIe TabIe partiaI)
File ComponenL_ Sequence
FileA ComponenLA
File8 ComponenL8 2

lCF60 checks LhaL iles in Lhe File Lable meeL Lhe ollowing condiLion.
O l Lhe ile is noL a onL and has a version, Lhen iL musL have a language.
O lCF60 checks LhaL no versioned iles are lisLed in Lhe MsiFileHash Lable.
Failure Lo ix a warning reporLed by lCF60 generally leads Lo a ile being needlessly reinsLalled when a producL
repair is done. 1his happens because Lhe ile Lo be insLalled in Lhe repair and Lhe exisLing ile on disk have Lhe
same version (Lhey are Lhe same ile) buL dierenL languages. 1he ile Lable lisLs Lhe language as null, buL Lhe ile
iLsel has a language value in Lhe resource. 8ased on Lhe ile versioning rules, Lhe insLaller avors Lhe ile Lo be
insLalled, so iL is recopied needlessly.
Result
lCF60 posLs a warning or an error i a ile in Lhe File Lable LhaL is noL a onL and has a version, does noL have a
language.
lCF60 posLs Lhe ollowing error i a ile lisLed in Lhe MsiFileHash Lable is versioned.
Copy
L8808: "1he 11e j s versoned. 1t cannot be hashed"
Example
lCF60 reporLs Lhe ollowing error and warning or Lhe example shown. (File 8 is a onL, Lhe oLher iles are noL.)
Copy
W^8u1u6: 1he 11e I1eL s not a Iont, and ts verson s not a companon 11e
re1erence. 1t shou1d have a 1anguage spec1ed n the anguage co1umn.
FileA has boLh a version and a language, Lhereore no warning or error is generaLed.
File8 has a version buL no language. No warning or error is generaLed, however, because iL is a onL.
FileC is a companion reerence, so iL does noL have Lo have a language. No warning or error is generaLed.
FileD has no version, so iL does noL need Lo have a language. No warning or error is generaLed.
FileF has a version buL no language. 1hereore a warning is generaLed.
1o ix Lhis warning, add a language Lo FileF.
Files should have language values sLored in Lhe version resource whenever possible. l a ile is language neuLral,
use Lhe LANClD 0.
liIe TabIe (File8 is a onL, Lhe oLher iles are noL.)
File version Language
FileA .0 033
File8 .0
FileC FileA
FileD
FileF .0
lont TabIe
File FonL1iLle
File8 FonL 1iLle

lCF6 checks Lhe upgrade Lable Lo ensure LhaL Lhe ollowing condiLions are Lrue.
O All AcLionProperLy properLies are noL pre-auLhored in Lhe ProperLy Lable.
O All AcLionProperLy properLies are Public ProperLies.
O All AcLionProperLy properLies are included in Lhe 5ecureCustom!roperties properLy.
O All AcLionProperLy properLies are unique Lo each record in Lhe Upgrade Lable.
O All versionMax values are noL less Lhan Lhe corresponding versionMin values.
O versionMin and versionMax values are valid producL versions. See Lhe !roductVersion properLy or
Lhe valid producL version ormaL.
O No aLLempL is made Lo remove a newer or equal version o Lhe currenL producL.
Failure Lo ix a warning or error reporLed by lCF6 generally leads Lo problems in upgrading your applicaLion.
Depending on Lhe exacL error, Lhis could be anyLhing rom leaving iles rom Lhe older version behind, deleLing
iles rom Lhe older version even Lhough Lhey are needed by Lhe new applicaLion, or compleLe ailure o Lhe
upgrade.
Result
lCF6 posLs a warning or error i any o Lhe above condiLions are noL Lrue.
Example
lCF6 reporLs Lhe ollowing errors and warning or Lhe examples shown.
Copy
1hs product shou1d remove on1y o1der versons o1 tse11. 1he Maxmum verson s not
1ess than the current product. {.. ..)
ln Lhis case, Lhe irsL row would Lry Lo remove a producL o Lhe same version. (versionMax column is equal Lo
Lhe producL version in Lhe ProperLy Lable).
1o ix Lhis error, use a version in Lhe versionMax column lower Lhan Lhe currenL version speciied in Lhe ProperLy
Lable. Remove Lhe msidbUpgradeAttributesVersionMaxlncIusive biL rom Lhe ALLribuLes column i Lhe
versionMax is equal Lo Lhe currenL version. l Lhe inLenL is only Lo deLecL Lhe producL and noL remove iL, adding
Lhe msidbUpgradeAttributesOnIyDetect biL Lo Lhe ALLribuLes column will also ix Lhis error.
Copy
upgrade.^ctonroperty Lng1sh^I0uu0 must be added to the SecureCustomropertes
property.
Unless Lhe properLy is lisLed in Lhe 5ecureCustom!roperties properLy, Lhe properLy is noL passed Lo Lhe server
side o Lhe insLall when Lhe properLy is ound.
1o ix Lhis error, add Lhe properLy Lo 5ecureCustom!roperties.
Copy
upgrade.^ctonroperty Lng1sh^I0uu0 must not contan 1owercase 1etters.
Upgrade properLies musL be public properLies or Lhe resulL Lo be passed Lo Lhe server side o Lhe insLallaLion.
1o ix Lhis error, use all uppercase leLLers in Lhe properLy name.
Copy
upgrade.^ctonroperty 00^I0uu0 may be used n on1y one record o1 the upgrade
tab1e.
A properLy can only be used in one row o Lhe Upgrade Lable.
1o ix Lhis error, use a dierenL properLy or Lhe second row.
Copy
upgrade.versonMax cannot be 1ess than upgrade.versonMn. {00^I0uu0)
1he minimum version musL be less Lhan Lhe maximum version.
1o ix Lhis error, check your version numbers or Lypos. l Lhey are correcL and you wanL Lo use Lhe range
beLween Lhe Lwo versions, swiLch Lhem so LhaL versionMin is less Lhan versionMax.
ProperLy 1able
ProperLy value
UpgradeCode [6AA4C55-F7F-D2-9388-0060089A76D8}
!roductVersion 2.0.0000
5ecureCustom!roperties OLDAPPFOUND
Upgrade 1able
UpgradeCode versionMi
n
versionMa
x
Languag
e
ALLribuLe
s
Remove AcLionProperLy
[6AA4C55-
F7F-D2-
2.0.0000 53 OLDAPPFOUND
9388-
0060089A76D8
}
[6AA4C55-
F7F-D2-
9388-
0060089A76D8
}
2.0.000 2.0.0000 OLDAPPFOUND
[C6C84596-
D8F8-D5A4-
635F-
9FF456D682F8}
.00.0000 2.00.0000 033 [AppFeaLureFnglish
]
FnglishAPPFOUN
D

lCF62 perorms exLensive checks on Lhe lsolaLedComponenL Lable or daLa LhaL may cause unexpecLed
behavior.
Failure Lo ix an error reporLed by lCF62 can resulL in a ailure o Lhe isolaLed componenL sysLem in a wide
varieLy o ways. For example, i Lhe SharedDllReCounL biL is noL seL or a shared componenL, Lhe regisLraLion or
Lhe componenL could be removed when anoLher applicaLion uses LhaL ComponenLld and is uninsLalled.
Result
lCF62 posLs a warning or error when iL inds daLa in Lhe lsolaLedComponenL Lable LhaL may produce unexpecLed
behavior.
Example
lCF62 reporLs Lhe ollowing errors and warning or Lhe examples shown.
Copy
1he component 'Component' s 1sted as an so1ated app1caton
component n the 1so1atedComponent tab1e, but the key path s not a 11e.
ComponenL2 is lisLed as Lhe applicaLion componenL or Lhe isolaLion o componenL. However, ComponenL2
has a regisLry key paLh, and does noL provide a valid execuLable paLh Lo use Lo isolaLe Lhe componenL.
1o ix Lhis error, use a dierenL componenL as Lhe applicaLion or Lhe isolaLed componenL ComponenL.
Copy
1he component 'Component' s 1sted as an so1ated shared component n the
1so1atedComponent tab1e, but s not marked wth the Shared0118e1Count component
attrbute.
ComponenL is lisLed as an isolaLed shared componenL, buL does noL have Lhe SharedDllReCounL biL seL. 1his
could resulL in Lhe lieLime o Lhe componenL being incorrecL. l anoLher applicaLion uses Lhis componenL
(isolaLed or noL) and is uninsLalled, Lhe regisLraLion or Lhe componenL is removed buL Lhis applicaLion's isolaLed
copy remains. 1his causes repair and uninsLall problems.
1o ix Lhis error, seL Lhe SharedDllReCounL biL or Lhe componenL.
Copy
1he so1ated shared component 'Component' s not nsta11ed by the same 1eature as
{or a parent 1eature o1) ts so1ated app1caton component 'Component' {whch s
nsta11ed by 1eature 'Ieature').
ComponenL and ComponenL2 are insLalled by dierenL eaLures. ComponenL is insLalled by FeaLure, and
ComponenL2 is insLalled by FeaLure2. FeaLure is noL a parenL o FeaLure2, hence iL is possible or Lhe
applicaLion Lo be insLalled buL noL Lhe isolaLed componenL, breaking Lhe isolaLion.
1o ix Lhis error, add an enLry Lo Lhe FeaLureComponenLs Lable linking ComponenL Lo Lhe same eaLure as (or a
parenL eaLure o) Lhe eaLure LhaL insLalls ComponenL2.
Copy
W^8u1u6: 1he so1ated shared component 'Component' {re1erenced n the
1so1atedComponent tab1e)
s condtona1zed. 1so1ated shared component condtons shou1d never change 1rom
18uL to I^SL a1ter the 1rst nsta11 o1 the product.
ComponenL has a condiLion in Lhe ComponenL Lable. l Lhis condiLion ever changes rom 1RUF Lo FALSF during
Lhe lieLime o an insLallaLion on a compuLer, Lhe isolaLed componenL could be orphaned wiLhouL regisLraLion
inormaLion.
1o ix Lhis warning, remove Lhe condiLion, or auLhor Lhe condiLion so LhaL iL can never change rom 1RUF Lo
FALSF.
Copy
W^8u1u6: 1he so1ated shared component 'Component' s shared by mu1tp1e
app1catons
{nc1udng 'Component') that are nsta11ed to the drectory '1^86L1018'.
W^8u1u6: 1he so1ated shared component 'Component' s shared by mu1tp1e
app1catons
{nc1udng 'Component2') that are nsta11ed to the drectory '1^86L1018'.
ComponenL is isolaLed or boLh ComponenL2 and ComponenL3, and Lhe Lwo componenLs are also insLalled Lo
Lhe same direcLory. 1he applicaLions share an isolaLed componenL, buL i one applicaLion is removed Lhe shared
componenL is removed as well causing Lhe oLher applicaLions Lo lose Lhe isolaLed componenL.
1o ix Lhis warning, insLall Lhe applicaLions Lo dierenL direcLories or check wheLher some o Lhe applicaLions
Lruly require an isolaLed componenL.
lsoIatedComponent TabIe
ComponenL_Shared ComponenL_ApplicaLion
ComponenL ComponenL2
ComponenL ComponenL3
Component TabIe
ComponenL ComponenLld DirecLory_ ALLribuLes CondiLion KeyPaLh
ComponenL Dir 0 MCONDl1lON File
ComponenL2 1ARCF1DlR 4 RegisLry2
ComponenL3 1ARCF1DlR 0 File3
leatureComponentsTabIe
FeaLure_ ComponenL_
FeaLure ComponenL
FeaLure2 ComponenL2
FeaLure ComponenL3
leature TabIe partiaI)
FeaLure FeaLure_ParenL
FeaLure
FeaLure2

lCF63 checks or proper sequencing o Lhe RemoveFxisLingProducLs acLion. 1he RemoveFxisLingProducLs acLion
may be placed.
. 8eLween lnsLallvalidaLe and lnsLalllniLialize
2. lmmediaLely aLer lnsLalllniLialize, or aLer lnsLalllniLialize i Lhe acLions beLween lnsLalllniLialize and
RemoveFxisLingProducLs do noL generaLe any scripL acLions.
3. lmmediaLely aLer lnsLallFxecuLe or lnsLallFxecuLeAgain and beore lnsLallFinalize (Lhe same resLricLion
as above applies).
4. ALer lnsLallFinalize.
Failure Lo ix a warning or error reporLed by lCF63 leads Lo ailure o Lhe upgrade.
Result
lCF63 posLs a warning or error i Lhe sequencing o Lhe RemoveFxisLingProducLs acLion is noL correcL.
Example
lCF63 reporLs Lhe ollowing error or Lhe example shown.
Copy
W^8u1u6: Some acton 1a11s between 1nsta111nta1ze and 8emoveLxstngroducts.
1he acLion 'MyCusLomAcLion' occurs beLween lnsLalllniLialize and RemoveFxisLingProducLs. l MyCusLomAcLion
generaLes any acLions in Lhe scripL, Lhis causes problems in Lhe insLallaLion.
1o ix Lhis error, veriy LhaL MyCusLomAcLion does noL generaLe any scripL acLions or resequence Lhe acLions.
lnstaIIxecute5equence TabIe
AcLion CondiLion Sequence
lnsLalllniLialize 000
MyCusLomAcLion 00
RemoveFxisLingProducLs 020

lCF64 checks LhaL new direcLories in Lhe user proile are removed correcLly in roaming scenarios.
Failure Lo ix a warning or error reporLed by lCF64 generally leads Lo problems in compleLely cleaning Lhe
compuLer during an uninsLallaLion. When a roaming user who has insLalled Lhe applicaLion logs on Lo a
compuLer or Lhe irsL Lime, all o Lhe proile is copied down onLo Lhe compuLer. On adverLisemenL (which Lakes
place aLer Lhe roaming proile download), Lhe lnsLaller veriies LhaL Lhe direcLory is already Lhere and Lhereore
does noL deleLe iL on uninsLallaLion. 1his leaves Lhe direcLory on Lhe user's compuLer permanenLly.
Result
lCF64 posLs a warning or an error in a roaming siLuaLion i a new direcLory in Lhe user proile LhaL should be
removed is noL removed.
Example
lCF64 reporLs Lhe ollowing error or Lhe example shown.
Copy
1he drectory 'My0therIo1der' s n the user pro11e but s not 1sted n the
8emoveI1e tab1e.
1he older 'MyOLherFolder' is a cusLom proile older. 8ecause iL is noL lisLed in Lhe RemoveFile Lable, iL is noL
removed in some scenarios.
1o ix Lhis error, creaLe a row or Lhe older in Lhe RemoveFile Lable.
Directory TabIe
DirecLory DirecLory_ParenL DeaulLDir
AppDaLaFolder 1ARCF1DlR
MyFolder AppDaLaFolder DaLaFolder
MyOLherFolder AppDaLaFolder DaLaFolder2
RemoveliIe TabIe
FileKey ComponenL_ FileName DirProperLy lnsLallMode
Key ComponenL MyFolder 2

lCF65 checks LhaL Lhe FnvironmenL Lable does noL have invalid preix or append values.
Failure Lo ix a warning or error reporLed by lCF65 generally leads Lo problems in insLall, uninsLall, or repair o
Lhe environmenL variable. For example, only some values o a parLicular variable may be removed i one or
more o Lhe values or LhaL variable have a Lrailing separaLor.
Result
lCF65 posLs a warning or an error i Lhe environmenL Lable has invalid preix or append values.
Example
lCF65 reporLs Lhe ollowing error and warning or Lhe example shown.
Copy
1he envronment varab1e 'var2' has a separator begnnng or endng ts va1ue.
1he Lrailing null aL Lhe end o Lhe value ([~]) marks Lhis value Lo be prepended Lo any exisLing value. 1he
characLer immediaLely beore Lhe null (a semicolon) becomes Lhe separaLor or Lhis value. 1his value has a
semicolon aL Lhe beginning o Lhe sLring as well.
1o ix Lhis error, simply deleLe Lhe leading semicolon.
Copy
W^8u1u6: 1he envronment varab1e 'var' has an a1phanumerc separator
1he leading null in Lhe value ([~]) marks Lhis value Lo be appended Lo any exisLing value. 1he characLer
immediaLely aLer Lhe null becomes Lhe separaLor or Lhis value. ln Lhis case, LhaL characLer is Lhe leLLer "e",
which also occurs in Lhe middle o Lhe sLring Lo be appended. 1his condiLion (having a separaLor LhaL is Lhe
same as a characLer wiLhin Lhe sLring Lo be appended) can cause unpredicLable resulLs.
1he leLLer "e", being a common leLLer, is likely Lo be ound in Lhe value. A beLLer choice would be "," or some
oLher non-alphanumeric characLer. (However, i Lhe value is a paLh, Lhen "." and "\" and "." are risky choices.)
1o ix Lhis warning, use a dierenL separaLor characLer.
FnvironmenL 1able
ComponenL DirecLory ALLribuLes KeyPaLh
var 1esLvar [~],Append1his 1esLComponenL
var2 1esLvar [~]eAppend1his 1esLComponenL
var3 1esLvar ,Prepend1his,[~] 1esLComponenL

lCF66 uses Lhe Lables in Lhe daLabase Lo deLermine which schema your daLabase should use.
Some uncLionaliLy may only be available i Lhe package is insLalled on a sysLem wiLh a currenL Windows
lnsLaller version.
Result
lCF66 posLs a warning i your daLabase is using Lhe wrong schema.
Example
lCF66 reporLs Lhe ollowing warning or Lhe example shown.
Copy
W^8u1u6: Comp1ete 1unctona1ty o1 the 1so1atedComponents tab1e s on1y ava1ab1e
wth Wndows 1nsta11er versons . or greater. Your schema s .
1his warning can be ignored i you wanL your package Lo be insLalled using a currenL Windows lnsLaller version.
For example, i you wanL your package Lo be insLallable only on version 2.0 or laLer, change your package
schema (PlD_PACFCOUN1) Lo 200.
lsoIatedComponent TabIe
ComponenL_Shared ComponenL_ApplicaLion
ComponenL ComponenL2
5ummary lnformation 5tream
PlDL value
PlD_PACFCOUN1 00
%able used during execution:
_CoIumns Lable

lCF67 checks LhaL Lhe LargeL o a non-adverLised shorLcuL belongs Lo Lhe same componenL as Lhe shorLcuL iLsel,
or LhaL Lhe aLLribuLes o Lhe LargeL componenL ensure LhaL iL does noL change insLallaLion locaLions.
Failure Lo ix a warning or error reporLed by lCF67 can cause Lhe shorLcuL Lo be invalid i Lhe LargeL componenL
changes sLaLe and Lhe source componenL does noL. For example, when Lhe LargeL ile's componenL is seL Lo run
rom source, a reinsLallaLion LhaL changes Lhe componenL Lo local resulLs in Lhe componenL conLaining Lhe
shorLcuL noL being reinsLalled. 1hus Lhe shorLcuL poinLs Lo an invalid locaLion.
NoLe LhaL in some cases, using a dierenL componenL or Lhe shorLcuL is unavoidable. For example, i Lhe
shorLcuL is creaLed in Lhe user proile and Lhe ile is insLalled Lo a non-proile direcLory, you may noL be able Lo
use Lhe same componenL or boLh pieces o daLa. (1his resulLs in ailures in mulLi-user scenarios - such as Lhose
described in lCF57). ln Lhis case, you may be able Lo use adverLised shorLcuLs Lo achieve Lhe behavior you wanL,
or you can simply ensure LhaL Lhe LargeL componenL cannoL change rom run-rom-source Lo local.
Result
lCF67 reLurns an error or a warning i Lhe LargeL o a non-adverLised shorLcuL does noL belong Lo Lhe same
componenL as Lhe shorLcuL iLsel, or i Lhe aLLribuLes o Lhe LargeL componenL do noL ensure LhaL Lhe insLallaLion
locaLions will noL change.
Example
lCF67 reporLs Lhe ollowing warning and errors or Lhe example shown.
Copy
1he shortcut 'Shortcut' s a non-advertsed shortcut wth a 11e target. 1he
shortcut and target are nsta11ed by d11erent components, and the target component
can run 1oca11y or 1rom source.
ShorLcuL is insLalled by ComponenL2, buL iLs LargeL ile, File, is insLalled by componenL. 1he LargeL
componenL is marked opLional (meaning LhaL iL can be local or run-rom-source). One possible siLuaLion LhaL
would cause a problem is i ComponenL changes rom run-rom-source Lo local. 1his would cause ShorLcuL Lo
poinL Lo an invalid locaLion.
1o ix Lhis warning, lnsLall Lhe shorLcuL as parL o ComponenL, or mark ComponenL as LocalOnly or
SourceOnly.
liIe TabIe partiaI)
File ComponenL_
File ComponenL
5hortcut TabIe partiaI)
ShorLcuL ComponenL_ 1argeL
ShorLcuL ComponenL2 [#File]
Component TabIe partiaI)
ComponenL ALLribuLes
ComponenL 2

%
lCF68 checks LhaL all cusLom acLion Lypes needed or an insLallaLion are valid. Failure Lo ix Lhe error reporLed by
lCF68 causes an insLallaLion LhaL aLLempLs Lo execuLe Lhe acLion Lo ail. lCF68 issues a warning i Lhe
msidbCustomActionTypeNolmpersonate aLLribuLe is seL wiLhouL also seLLing Lhe
msidbCustomActionTypeln5cript aLLribuLe.
Result
lCF68 reLurns an error i an acLion Lype needed or an insLallaLion is invalid.
Example
lCF68 posLs Lhe ollowing warning i a cusLom acLion has Lhe msidbCustomActionTypeNolmpersonate biL seL
in Lhe 1ype ield o Lhe CusLomAcLion Lable wiLhouL Lhe msidbCustomActionTypeln5cript also seL.
Copy
Lven though custom acton 'j' s marked to be e1evated {wth
attrbute msdbCustom^cton1ypeuo1mpersonate), t w11 not be run wth e1evated
prv1eges because t's not de1erred {wth attrbute msdbCustom^cton1ype1nScrpt).
1o ix Lhis warning, include msidbCustomActionTypeln5cript (0x400) i Lhe cusLom acLion includes
msidbCustomActionTypeNolmpersonate (0x800). OLherwise Lhe insLaller ignores Lhe
msidbCustomActionTypeNolmpersonate aLLribuLe. For more inormaLion, see CusLom AcLion ln-ScripL
FxecuLion OpLions.
lCF68 reporLs Lhe ollowing error or Lhe example shown.
Copy
1nva1d custom acton type 1or acton '^cton'.
027 is noL a valid acLion Lype.
1o ix Lhis error, choose a valid cusLom acLion Lype.
CusLomAcLion 1able (parLial)
AcLion 1ype Source 1argeL
AcLion 027 ArgumenL ComponenL

%
lCF69 checks LhaL all subsLrings o Lhe orm [ScomponenLkey] wiLhin a ormaLLed sLring do noL cross-reerence
componenLs. A cross-componenL reerence occurs when Lhe [ScomponenLkey] properLy o a ormaLLed sLring
reers Lo a componenL oLher Lhan Lhe componenL sLored in Lhe ComponenL_ column o your Lables.
Problems wiLh cross-componenL reerencing arise rom Lhe way ormaLLed sLrings are evaluaLed. l Lhe
componenL reerenced wiLh Lhe [ScomponenLkey] properLy is already insLalled and is noL being changed during
Lhe currenL insLallaLion (or example, being reinsLalled, moved Lo source, and so orLh), Lhe expression
[ScomponenLkey] evaluaLes Lo null, because Lhe acLion sLaLe o Lhe componenL in [ScomponenLkey] is null.
Similar problems can occur during upgrade and repair operaLions.
Result
lCF69 reLurns an error i a [ScomponenLkey] subsLring wiLhin a ormaLLed sLring cross-reerences a componenL
in anoLher eaLure. lCF69 reLurns a warning i a [ScomponenLkey] subsLring wiLhin a ormaLLed sLring cross-
reerences a componenL in Lhe same eaLure. (1he FeaLureComponenLs Lable is used Lo deLermine Lhis mapping.
lL musL map Lo Lhe same eaLure or Lhe warning. Reerencing componenLs in parenL eaLures or reerencing
componenLs in child eaLures is considered Lo be an error.)
lCF69 reporLs an error i Lhe [#FileKey] subsLring wiLhin a ormaLLed sLring reerences a ile which is noL speciied
in Lhe File Lable as belonging Lo Lhe same componenL.
Example
lCF69 reporLs Lhe ollowing or Lhe examples shown.
Copy
W^8u1u6: "Msmatched component re1erence. Lntry '1est' o1 the Shortcut tab1e be1ongs
to component 'quck1est'. uowever, the 1ormatted strng n co1umn '^rgument'
re1erences component '1est'. Components are n the same 1eature."
L8808: "Msmatched component re1erence. Lntry 'Shortcut' o1 the Shortcut tab1e
be1ongs to component 'quck1est'. uowever, the 1ormatted strng n co1umn '^rgument'
re1erences component '1est'. Components are not n the same 1eature."
1o ix Lhis error, do noL cross-reerence componenLs. Change Lhe [ScomponenLkey] Lo maLch Lhe componenL o
Lhe shorLcuL.
ShorLcuL 1able (parLial)
ShorLcuL ComponenL_ ArgumenL
1esL Quick1esL -v [S1esL]
ShorLcuL2 Quick1esL [S1esL2]
1he verb and FxLension Lables are special cases in LhaL Lhe verb Lable reerences an exLension LhaL belongs Lo a
componenL. An FxLension, however, can belong Lo mulLiple componenLs because Lhe primary key or Lhe
exLension Lable is made up o Lhe FxLension and ComponenL_ columns. ou can logically have Lhe ollowing
siLuaLion.
verb 1able (parLial)
FxLension verb_ ArgumenL
LsL open -v [Scomp][Scomp2]
FxLension 1able (parLial)
FxLension ComponenL_
LsL comp
LsL comp2
FeaLureComponenLs 1able
FeaLure_ ComponenL_
FeaLure Quick1esL
FeaLure 1esL
FeaLure2 1esL2
ln Lhis case, you musL ensure LhaL aL leasL one o Lhe [ScomponenLkey] properLies evaluaLes Lo a non-null value.
However, every [ScomponenLkey] properLy in Lhe ArgumenL column o Lhe verb Lable ([Scomp] and [Scomp2]
in Lhe above example) musL reerence a possible componenL included wiLh Lhe exLension associaLed wiLh Lhe
verb. A reerence like [Scomp3] would resulL in a warning rom lCF69.
1he Appld Lable has a similar siLuaLion Lo Lhe verb Lable. lL uses Lhe Class Lable or iLs componenL reerence. ln
Lhis case, Lhe Appld Lable is validaLed in Lhe same way as Lhe verb-FxLension validaLion (now Appld-Class).
1he Class Lable's ArgumenL column is validaLed like Lhe ShorLcuL, RegisLry, and similar Lables.
%able used during execution (only if found)
lniFile
RemovelniFile
RegisLry
RemoveRegisLry
ServiceConLrol
ServicelnsLall
ShorLcuL
verb
FxLension
Class
Appld
FnvironmenL

lCF70 veriies LhaL inLeger values or regisLry enLries are speciied correcLly. values o Lhe orm ##sLr,
#%unexpanded sLr are noL validaLed. values o Lhe orm #xhex, #Xhex, #inLeger, and #[properLy] are validaLed.
1he ollowing Lable provides a brie overview.
value validaLion
##sLr valid
#%unexpanded sLr valid
#xHex,#XHex validaLe or valid hex characLers (0-9,a-,A-F). ProperLies are allowed here.
#-inL, #-inL, #inL validaLe or valid numeric characLers (0-9). ProperLies are allowed here.
1he synLax or an inLeger value Lo be enLered inLo Lhe regisLry is #inLeger where inLeger is numerical.
Result
lCF70 reporLs an error i inLeger values or regisLry enLries are noL speciied correcLly.
Example
lCF70 reporLs Lhe ollowing errors or Lhe given example.
Copy
1he va1ue xz24 s an nva1d numerc va1ue 1or regstry entry 8eg. 11 you meant
to use a strng, then the strng va1ue entry must be preceded by not .
1o ix Lhis error. l you wanL Lhe value Lo be numeric, change Lhe value Lo use all numeric characLers. l you wanL
Lhe value Lo be a sLring, iL musL be preceded by Lwo '#' (##) insLead o jusL one.
Copy
1he va1ue xz24 s an nva1d hexadecma1 va1ue 1or regstry entry 8eg.
1o ix Lhis error. valid hexadecimal characLers are 0-9, A-F, and a-. Only Lhese characLers can ollow Lhe #x (or
#X).
Registry tabIe partiaI)
RegisLry value
Reg #2xz34
Reg2 #xz34
Remarks
O #[myproperLy] is valid.
O #[myproperLy is noL valid (missing ending brackeL).
O #[myprop] [myprop2 is valid. (Fven Lhough Lhe lasL one is missing Lhe ending brackeL, myprop could
evaluaLe Lo #sLr so you would have ##sLr [myprop2, which is valid
O #]myproperLy[ is noL valid
O Any embedded properLy in a value sLring cannoL be in [Scompkey], [#ilekey], or [!ilekey] orm because
Lhese are noL numeric. However, Lhere is one excepLion, #[myproperLy] [Scompkey] (or [#ilekey] or
[!ilekey]) is valid because, as wiLh Lhe preceding, [myproperLy] can evaluaLe Lo #sLr.

lCF7 veriies LhaL Lhe Media tabIe conLains an enLry wiLh Diskld equal Lo . (Windows lnsLaller assumes LhaL
Lhe .msi package is on disk .)
Result
lCF7 reLurns an error i Lhe Media Lable does noL conLain an enLry wiLh Diskld equal Lo .
Example
lCF7 reporLs Lhe ollowing error or Lhe example shown.
Copy
1he Meda tab1e requres an entry wth 0sk1d=. Irst 0sk1d s ''.
10 ix Lhis error, change Lhe Diskld o Lhe enLry where Lhe package is sLored Lo .
Media TabIe partiaI)
Diskld
2

lCF72 veriies LhaL non-builL-in cusLom acLions are noL used in Lhe AdvLFxecuLeSequence Lable. Speciically, only
Lype 9, Lype 35, and Lype 5 cusLom acLions are allowed in Lhe AdvLFxecuLeSequence Lable. l oLher cusLom
acLions are used, adverLisemenL may noL behave as expecLed.
Result
lCF72 reLurns an error i Lhe AdvFxecuLeSequence Lable uses cusLom acLions oLher Lhan Lype 35, Lype 5, and
Lype 9.
Example
lCF72 reporLs Lhe ollowing error or Lhe example shown.
Copy
Custom ^cton 'C^' n the ^dvtLxecuteSequence tab1e s not a11owed. 0n1y bu1t-n
custom actons are a11owed.
1o ix Lhe error, remove 'CA' rom Lhe AdvLFxecuLeSequence Lable.
Advtxecute5equence TabIe partiaI)
AcLion
CA
CA35
CustomAction TabIe partiaI)
AcLion 1ype
CA
CA35 35
%ables used during execution
AdvLFxecuLeSequence 1able
CusLomAcLion 1able

lCF73 veriies LhaL your package does noL reuse package codes, upgrade codes, or producL codes o Lhe
Windows lnsLaller SDK samples. Packages should never reuse Lhe package, upgrade, or producL codes o
anoLher producL.
Result
lCF73 ouLpuLs a warning i your producL's package reuses a package or producL code o a Windows lnsLaller
SDK sample.
Example
lCF73 reporLs Lhe ollowing errors or Lhe example shown.
Copy
1hs package reuses the '{8I7L2-^7S-0-^704-67C86)' roductCode o1 the
orca.ms . Wndows 1nsta11er S0k package.
1hs package reuses the '{C---C-47)' ackage Code o1 the
msspy.ms . Wndows 1nsta11er S0k package.
1hs package reuses the '{8IC7****-88^-4b4-888-8S04^^4C)' upgrade Code o1 a
. Wndows 1nsta11er S0k package.
Note 1he asLerisks (****) in Lhe CUlD represenL Lhe range o CUlDs reserved or subsequenL Windows lnsLaller
SDK packages.
1o ix Lhe errors, generaLe a new unique CUlD or your package's producL and package codes. ou will also
need a new unique CUlD or your package's upgrade code.
Summary lnormaLion SLream (parLial)
ProperLy value
PlD_RFvNUM8FR [000C0-0000-0000-C000-000000000047}
ProperLy 1able (parLial)
ProperLy value
!roductCode [80F7F030-A75-D2-A7D4-006097C99860}
UpgradeCode [8FC70000-88A0-4b4-8288-8905D4AA904C

lCF74 veriies LhaL Lhe lA5TOM properLy has noL been auLhored inLo Lhe ProperLy Lable.
1he lA5TOM properLy enables OFMs Lo reduce Lhe Lime required Lo insLall Windows lnsLaller applicaLions or
Lhe irsL Lime. lL cannoL be used aLer Lhe irsL insLall. 1he lA5TOM properLy musL noL be auLhored in Lhe
ProperLy Lable because Lhis inLereres wiLh subsequenL insLallaLions or Lhe mainLenance, removal, or repair o
Lhe applicaLion.
lCF74 also veriies LhaL Lhe UpgradeCode properLy is auLhored inLo Lhe ProperLy Lable, and LhaL iLs value is noL
a null CUlD, [00000000-0000-0000-0000-000000000000}.
Result
lCF74 can posL Lhe ollowing errors.
lCF74 error DescripLion
1he lA5TOM properLy cannoL be auLhored in
Lhe ProperLy Lable.
1he lA5TOM properLy has been seL in Lhe ProperLy Lable.
'[2]' is noL a valid UpgradeCode. A null CUlD has been enLered or Lhe UpgradeCode
properLy in Lhe ProperLy Lable.
lCF74 can posL Lhe ollowing warning.
lCF74 warning DescripLion
1he UpgradeCode properLy is noL auLhored in Lhe ProperLy Lable. lL is
sLrongly recommended LhaL auLhors o insLallaLion packages speciy an
UpgradeCode or Lheir applicaLion.
1he UpgradeCode properLy is
noL auLhored in Lhe ProperLy
Lable.
Example
lCF74 reporLs Lhe ollowing error i Lhe lA5TOM properLy is seL. 1he FAS1OFM
Copy
property cannot be authored n the roperty tab1e.
ProperLy 1able (parLial)
ProperLy value
lA5TOM
1o ix Lhis error remove Lhe lA5TOM properLy rom Lhe ProperLy 1able.

lCF75 veriies LhaL all CusLom AcLion 1ype 7 (DLL), CusLom AcLion 1ype 8 (FXF), CusLom AcLion Lype 2
(JScripL), and CusLom AcLion 1ype 22 (v8ScripL) cusLom acLions are sequenced aLer Lhe CosLFinalize acLion.
1hese Lypes o cusLom acLion use an insLalled ile as Lheir source. lCF75 checks Lhe lnsLallUlSequence 1able,
lnsLallFxecuLeSequence 1able, AdminUlSequence 1able, and AdminFxecuLeSequence 1able. NoLe LhaL Lhe
CosLFinalize acLion is required in Lhese sequence Lables.
Result
lCF75 posLs an error i iL inds a cusLom acLion using an insLalled ile as a source ile LhaL is noL sequenced aLer
Lhe CosLFinalize acLion.
Example
lCF75 reporLs Lhe ollowing errors or Lhe example shown.
Copy
CostIna1ze s mssng 1rom '^dmnu1Sequence'. C^_I1eLxe s a custom
acton whose source s an nsta11ed 11e. 1t must be sequenced a1ter
the CostIna1ze acton.

C^_I1e0 s a custom acton whose source s an nsta11ed 11e. 1t
must be sequenced a1ter the CostIna1ze acton n the
^dmnLxecuteSequence tab1e
CustomAction TabIe partiaI)
AcLion 1ype Source
CA_FileFxe 8 FileFxe
CA_FileDLL 7 FileDLL
AdminUl5equence TabIe partiaI)
AcLion Sequence
CA_FileFxe 00
Adminxecute5equence TabIe (parLial)
AcLion Sequence
CA_FileDLL 800
CosLFinalize 000
1o ix Lhe errors, sequence Lhe cusLom acLions aLer Lhe CosLFinalize acLion.

lCF76 veriies Lhe use o Lhe SFP (WFP) caLalog wiLhin Windows lnsLaller packages or Windows Me. 1his lCF
also veriies LhaL no iles in Lhe 8indlmage Lable reerence SFP caLalogs.
Windows File ProLecLion requires an exacL maLch beLween Lhe ile and Lhe signaLure embedded in Lhe caLalog
ile. Files LhaL reerence a SFP caLalog musL noL be lisLed in Lhe 8indlmage Lable because Lhe eecL o Lhe
8indlmage acLion on Lhese iles diers beLween compuLers. Files reerenced by SFP caLalogs musL be in
componenLs LhaL are permanenL or insLalled locally.
Result
lCF76 posLs an error or each ile in Lhe 8indlmage Lable LhaL is also in Lhe FileSFPCaLalog Lable.
lCF76 ouLpuLs an error i a ile in Lhe FileSFPCaLalog Lable belongs Lo a componenL wiLh any o Lhe ollowing
Lrue.
O msidbComponentAttributes!ermanent is noL seL in Lhe ALLribuLes column o Lhe ComponenL Lable.
O msidbComponentAttributes5ourceOnIy is seL in Lhe ALLribuLes column o Lhe ComponenL Lable.
O msidbAttributesOptionaI is seL in Lhe ALLribuLes column o Lhe ComponenL Lable.
Example
lCF76 reporLs Lhe ollowing error or Lhe example.
Copy
I1e 'I1e' re1erences a SI cata1og. 1here1ore t cannot be n the 8nd1mage tab1e.
FileSFPCaLalog 1able (parLial)
File_ SFPCaLalog_
File CaLalog.CaL
8indlmage 1able (parLial)
File_
File
1o ix Lhis do noL enLer any iles LhaL reerence SFP caLalogs inLo Lhe 8indlmage Lable.

lCF77 veriies LhaL cusLom acLions wiLh Lhe msidbCustomActionTypeln5cript biL seL are sequenced aLer Lhe
lnsLalllniLialize acLion and beore Lhe lnsLallFinalize acLion. lCF77 checks Lhe sequence in Lhe
lnsLallFxecuLeSequence Lable and AdminFxecuLeSequence Lable.
Result
lCF77 posLs an error i an in-scripL cusLom acLion is sequenced beore Lhe lnsLalllniLialize acLion or aLer Lhe
lnsLallFinalize acLion.
lCF77 posLs an error i Lhe lnsLalllniLialize acLion or Lhe lnsLallFinalize acLion is missing.
Example
lCF77 reporLs Lhe ollowing errors or Lhe example.
Copy
1nsta11Ina1ze s mssng 1rom '1nsta11LxecuteSequence'.
C^_1nScrpt1nsta11 s a n-scrpt custom acton. 1t must be sequenced
be1ore the 1nsta11Ina1ze acton.

C^_1nScrpt^dmn s a n-scrpt custom acton. 1t must be sequenced
n between the 1nsta111nta1ze acton and the 1nsta11Ina1ze acton
n the ^dmnLxecuteSequence Sequence tab1e.
CusLomAcLion 1able (parLial)
AcLion 1ype
CA_lnScripLlnsLall 025
CA_lnScripLAdmin 026
lnsLallFxecuLeSequence 1able (parLial)
AcLion Sequence
CA_lnScripLlnsLall 2000
lnsLalllniLialize 500
AdminFxecuLeSequence 1able (parLial)
AcLion Sequence
CA_lnScripLAdmin 400
lnsLalllniLialize 500
lnsLallFinalize 6600
1o ix Lhe errors, sequence Lhe in-scripL cusLom acLions aLer Lhe lnsLalllniLialize acLion and beore Lhe
lnsLallFinalize acLion. 1he lnsLalllniLialize and lnsLallFinalize acLions musL be presenL in Lhe
lnsLallFxecuLeSequence Lable and Lhe AdminFxecuLeSequence Lable.
%
lCF78 veriies LhaL Lhe AdvLUlSequence Lable eiLher does noL exisL or is empLy. 1his is required because no user
inLerace is allowed during adverLising.
Result
lCF78 posLs an error i Lhe AdvLUlSequence Lable exisLs and is noL empLy.
Example
lCF78 reporLs Lhe ollowing error or Lhe example.
AcLion 'AcLion' ound in AdvLUlSequence Lable. No Ul is allowed during adverLising. 1hereore AdvLUlSequence
Lable musL be empLy or noL presenL.
AdvtUl5equence LablepartiaI)
AcLion CondiLion Sequence
AcLion 1RUF
1o ix Lhe error, eiLher remove "AcLion" rom Lhe Lable, or remove Lhe Lable.
%
lCF79 validaLes Lhe reerences Lo componenLs and eaLures enLered in Lhe daLabase ields using Lhe CondiLion
daLa Lype.
Result
lCF79 posLs Lwo warnings.
lCF79 warning DescripLion
DaLabase is missing _validaLion Lable. Could noL compleLely check
properLy names.
DaLabase is missing _validaLion
Lable.
Frror reLrieving values rom column [2] in Lable []. Skipping Column. Frror reLrieving value.
lCF79 posLs Lwo errors.
lCF79 error DescripLion
ComponenL '%ls' reerenced in column '%s'.'%s' o row %s is
invalid.
An invalid componenL reerence was
ound.
FeaLure '%ls' reerenced in column '%s'.'%s' o row %s is invalid. An invalid eaLure reerence was ound
Example
lCF79 reporLs Lhe ollowing errors or Lhe example.
Copy
Component 'uoSuchComponent' re1erenced n co1umn
'1nsta11LxecuteSequence'.'Condton' o1 row Custom s nva1d.
Ieature 'uoSuchIeature' re1erenced n co1umn
'1nsta11LxecuteSequence'.'Condton' o1 row Custom s nva1d.
ln Lhis example, NoSuchComponenL is absenL rom Lhe ComponenL Lable and NoSuchFeaLure is absenL rom
Lhe FeaLure Lable.
lnstaIIxecute5equence TabIe partiaI)
AcLion CondiLion
CusLom 1FS1AC1lON=046 AND &NoSuchFeaLure>2
CusLom2 1FS1AC1lON=46 AND SNoSuchComponenL>2
1o ix Lhese errors, enLer valid records or NoSuchFeaLure and NoSuchComponenL in Lhe FeaLure and
ComponenL Lables.
%
lCF80 validaLes LhaL Lhe value o Lhe TempIate 5ummary ProperLy (PlD_1FMPLA1F) correcLly speciies "lnLel64",
"x64", or "lnLel" depending on Lhe presence o 64-biL componenLs or cusLom acLion scripLs. lCF80 checks Lhe
ComponenL 1able or any componenLs wiLh Lhe msidbComponentAttributes64bit aLLribuLe and checks Lhe
CusLomAcLion 1able or any scripLs wiLh Lhe msidbCustomActionType64Bit5cript aLLribuLe. lCF80 veriies LhaL
a package wiLh "lnLel64" or "x64" in iLs TempIate 5ummary ProperLy also has a !age Count 5ummary
ProperLy (PlD_PACFCOUN1) o aL leasL 50.
lCF80 also validaLes LhaL Lhe language lD speciied by Lhe !roductLanguage properLy musL be conLained in Lhe
TempIate 5ummary ProperLy.
For more inormaLion, see Windows lnsLaller on 64-biL OperaLing SysLems.
Result
lCF80 posLs Lhe ollowing errors.
Frror DescripLion
1his package conLains 64 biL componenL
'[]' buL Lhe TempIate 5ummary ProperLy
does noL conLain lnLel64 or x64.
1he ComponenL 1able conLains a componenL wiLh Lhe
msidbComponentAttributes64bit aLLribuLe and Lhe TempIate
5ummary ProperLy does noL conLain lnLel64 or x64.
1his package conLains 64 biL cusLom acLion
scripL '[]' buL Lhe TempIate 5ummary
ProperLy does noL conLain lnLel64 or x64.
CusLomAcLion 1able conLains a scripL cusLom acLion wiLh Lhe
msidbCustomActionType64Bit5cript buL Lhe TempIate
5ummary ProperLy does noL conLain lnLel64 or x64.
8ad value in Summary lnormaLion SLream
or %s.
ReLurned or PlD_1FMPLA1F properLy i LhaL properLy is an empLy
sLring or noL a v1_LPS1R Lype.
ReLurned or PlD_PACFCOUN1 i LhaL properLy iL is noL a v1_l4
Lype.
1his package is marked wiLh lnLel64 or x64
buL iL has a schema less Lhan 50.
1he PlD_1FMPLA1F properLy o Lhe package is lnLel64 or x64, buL
iLs PlD_PACFCOUN1 properLy is less Lhan 50.
1his 328iL Package is using 64 biL properLy
[]
A 32-biL package is using a 64-biL properLy.
1his 328iL Package is using 64 biL LocaLor
1ype in RegLocaLor Lable enLry []
A 32-biL package conLains msidbLocatorType64bit in Lhe 1ype
ield o Lhe RegLocaLor Lable.
1his 648iLComponenL [] uses
328iLDirecLory [3]
A 64-biL componenL is using a 32-biL direcLory.
1his 328iLComponenL [] uses
648iLDirecLory [3]
A 32-biL componenL is using a 64-biL direcLory.
1he '!roductLanguage' properLy in Lhe
ProperLy Lable has a value o '[2]', which is
noL conLained in Lhe 1emplaLe Summary
ProperLy sLream.
1he value o Lhe !roductLanguage properLy is noL lisLed in Lhe
TempIate 5ummary properLy

%
lCF8 validaLes Lhe MsiDigiLalCerLiicaLe Lable, MsiDigiLalSignaLure Lable, MsiPaLchCerLiicaLe Lable, and
MsiPackageCerLiicaLe 1able. 1his lCF cusLom acLion posLs warnings or digiLal cerLiicaLes LhaL are unused or
unreerenced, and iL posLs an error when Lhe signed objecL does noL exisL or when Lhe signed objecL's cabineL
does noL poinL Lo exLernal daLa.
NoLe LhaL lCF03 veriies LhaL Lhe enLry in Lhe 1able column in Lhe MsiDigiLalSignaLure Lable is "Media."
Result
lCF8 posLs Lhe ollowing warnings or unused or unreerenced DigiLal CerLiicaLes.
lCF8 warning DescripLion
No reerence Lo any o Lhe records in Lhe MsiDigiLalCerLiicaLe Lable could be
ound in MsiDigiLalSignaLure, MsiPackageCerLiicaLe, or MsiPaLchCerLiicaLe
Lables.
1his warning is reLurned i all
records are unused.
No reerence Lo Lhe DigiLal CerLiicaLe [] could be ound in
MsiDigiLalSignaLure, MsiPackageCerLiicaLe, or MsiPaLchCerLiicaLe Lables.
1his warning is reLurned i some
records, buL noL all, are unused.
lCF8 posLs Lhe ollowing errors.
lCF8 error DescripLion
Media 1able does noL exisL. Hence all Lhe enLries in
MsiDigiLalSignaLure are incorrecL
1he signed objecL does noL exisL. 1his error is
reLurned i Lhe Media Lable does noL exisL buL
MsiDigiLalSignaLure has enLries.
Missing signed objecL [2] in Media 1able 1he signed objecL [2] does noL exisL. 1his error is
reLurned i Lhe Media Lable exisLs, buL Lhis enLry in
MsiDigiLalSignaLure is noL presenL in Media Lable.
1he enLry in Lable [] wiLh key [2] is signed. Hence Lhe
cabineL should poinL Lo an objecL ouLside Lhe package
(Lhe value o CabineL should NO1 be preixed wiLh #)
1he signed objecL's cabineL does noL poinL Lo
exLernal daLa. [] is Lable name. [2] is key in Lhe
Media Lable.

%
lCF82 validaLes LhaL Lhe RegisLerProducL AcLion, RegisLerUser AcLion, PublishProducL AcLion, and
PublishFeaLures AcLion are all presenL in Lhe lnsLallFxecuLeSequence Lable. 1he package is validaLed i all Lhe
acLions are presenL.
lCF82 posLs a warning i Lhere are Lwo acLions wiLh Lhe same sequence number lisLed in Lhe
lnsLallFxecuLeSequence, lnsLallUlSequence, AdminFxecuLeSequence, AdminUlSequence, or
AdvLFxecuLeSequence Lables .
Result
lCF82 posLs Lhe ollowing warnings.
lCF82 warning DescripLion
1he lnsLallFxecuLeSequence Lable does
noL conLain Lhe seL o acLions
menLioned below.
AcLions Missing.
Publish FeaLures
Publish ProducL
RegisLer ProducL
RegisLer User
lCF82 cusLom acLion posLs a warning i all our acLions are absenL.
1his acLion [] has duplicaLe sequence
number [2] in Lhe Lable [3].
lCF82 posLs a warning i Lhere are Lwo acLions wiLh Lhe same sequence
number lisLed in Lhe lnsLallFxecuLeSequence, lnsLallUlSequence,
AdminFxecuLeSequence, AdminUlSequence, or AdvLFxecuLeSequence
Lables.
lCF82 posLs Lhe ollowing errors.
lCF82 error DescripLion
1he lnsLallFxecuLeSequence should eiLher conLain all o Lhe
acLions menLioned below or none o Lhem
AcLions PresenL
st cj cctcns resent>
AcLions Missing.
st cj cctcns mssn>
lCF82 posLs an error i some o Lhe our acLions
are presenL and oLhers are absenL.

%
lCF83 validaLes Lhe MsiAssembly Lable. 1his lCF cusLom acLion posLs an error i Lhe key paLh or a componenL
conLaining a Win32 assembly is seL Lo Lhe maniesL ile. FxpliciLly Lhe error is posLed i Lhe value enLered in Lhe
KeyPaLh ield o Lhe ComponenL Lable equals Lhe value enLered in Lhe File_ManiesL ield o Lhe MsiAssembly
Lable. 1his lCF cusLom acLion posLs an error i Lhere is aL leasL one record in Lhe MsiAssembly Lable and Lhe
lnsLallFxecuLeSequence Lable does noL conLain boLh Lhe MsiPublishAssemblies AcLion and
MsiUnpublishAssemblies AcLion.
Result
lCF83 posLs Lhe ollowing errors.
lCF83 error DescripLion
1he key paLh or Win32 SXS Assembly
(ComponenL_=[]) SHOULD NO1 be iLs
maniesL ile
lCF83 posLs Lhis error when Lhe KeyPaLh ield or a Win32
Assembly is seL Lo iLs maniesL ile (ComponenL.KeyPaLh ==
MsiAssembly.File_ManiesL). [] is KeyPaLh in ComponenL Lable
8oLh MsiPublishAssemblies AND
MsiUnpublishAssemblies acLions MUS1 be
presenL in lnsLallFxecuLeSequence Lable.
lCF83 posLs Lhis error when Lhere is aL leasL one enLry in Lhe
MsiAssembly Lable buL Lhe lnsLallFxecuLeSequence Lable does noL
conLain boLh Lhe MsiAssemblyPublish acLion and Lhe
MsiAssemblyUnpublish acLion.

%
lCF84 checks Lhe AdvLFxecuLeSequence Lable, AdminFxecuLeSequence Lable, and Lhe lnsLallFxecuLeSequence
Lable Lo veriy LhaL Lhe ollowing sLandard acLions have noL been seL wiLh condiLions in Lhe CondiLion ield.
O CosLlniLialize acLion
O CosLFinalize acLion
O FileCosL acLion
O lnsLallvalidaLe acLion
O lnsLalllniLialize acLion
O lnsLallFinalize acLion
O ProcessComponenLs acLion
O PublishFeaLures acLion
O PublishProducL acLion
O RegisLerProducL acLion
O UnpublishFeaLures acLion
l condiLions are ound, lCF84 posLs a warning.
Result
lCF84 posLs Lhe ollowing warning.
lCF84 error DescripLion
AcLion '[]' ound in %s Lable is a required acLion wiLh a
condiLion.
A required acLion has been auLhored wiLh a
condiLion.

%
lCF85 validaLes LhaL Lhe SourceName column o Lhe MoveFile Lable is a valid long ile name. 1his ield may
conLain wildcard characLers (* and ).
Result
lCF85 posLs Lhe ollowing errors.
lCF85 error DescripLion
SourceName '[2]' ound in Lhe MoveFile Lable is o
bad ormaL.
1he SourceName ield in Lhe MoveFile Lable is noL a valid
long ile name

%
lCF86 issues a warning i Lhe package uses Lhe AdminUser properLy in daLabase column o Lhe CondiLion Lype.
Package auLhors should use Lhe !riviIeged properLy in condiLional sLaLemenLs.
Result
lCF86 posLs Lhe ollowing warning.
lCF86 warning DescripLion
ProperLy `%s` ound in column `%s`.`%s` in row %s. `Privileged`
properLy is oLen more appropriaLe.
AdminUser properLy was used in a
CondiLion ield.

%
lCF87 validaLes LhaL Lhe ollowing properLies have noL been auLhored in Lhe ProperLy 1able. 1hese properLies
should insLead be seL on a command line.
O ADDLOCAL property
O RMOV property
O ADD5OURC property
O ADDDlAULT property
O RlN5TALL property
O ADVRTl5 property
O COM!ADDLOCAL property
O COM!ADD5OURC property
O llLADDLOCAL property
O llLADD5OURC property
O llLADDDlAULT property
Result
lCF87 posLs Lhe ollowing warning.
lCF87 warning DescripLion
1he properLy '[]' shouldn'L be auLhored inLo Lhe ProperLy
Lable. Doing so mighL cause Lhe producL Lo noL be
uninsLalled correcLly
1he speciied properLy should noL be seL in Lhe
ProperLy Lable. SeL Lhe properLy on a command
line insLead.

%%
lCF88 validaLes LhaL Lhe direcLory reerenced in Lhe DirProperLy column o Lhe lniFile Lable exisLs in Lhe Windows
lnsLaller package. lCF88 issues a warning i Lhe DirProperLy value does noL represenL a properLy in Lhe DirecLory,
AppSearch, or ProperLy Lables, cerLain sysLem older properLies, or a properLy seL by a Lype 5 cusLom acLion.
lCF88 scans Lhe ollowing Lables and properLies.
O DirecLory 1able
O AppSearch 1able
O ProperLy 1able
O CusLomAcLion 1able , where Lhe cusLom acLion is a CusLom AcLion 1ype 5
O !rogramliIesloIder !roperty
O CommonliIesloIder !roperty
O 5ystemloIder !roperty
O !rogramliIes64loIder !roperty
O CommonliIes64loIder !roperty
O 5ystem64loIder !roperty
Result
lCF88 posLs Lhe ollowing warning.
lCF88 Warning DescripLion
ln Lhe lniFile Lable enLry (lniFile=) [3] Lhe
DirProperLy=[] is noL ound in
DirecLory/ProperLy/AppSearch/CA-1ype5 Lables and
iL is noL one o Lhe insLaller properLies.
For each record in Lhe lniFile Lable, lCF88 reads Lhe
value in Lhe DirProperLy column. lCF88 scans or Lhe
value in Lhe DirecLory 1able, AppSearch 1able, and
ProperLy 1able and also scans Lhe lisL o properLies seL
by Lhe insLaller. lCF88 posLs Lhis warning i Lhe value
cannoL be ound in Lhe scan.

%%
lCF89 validaLes LhaL Lhe value in Lhe Progid_ParenL column in Progld Lable is a valid oreign key inLo Lhe Progld
column in Progld Lable. Fvery Progld parenL should have a record in Lhe Progld Lable.
Result
lCF89 posLs Lhe ollowing errors.
lCF89 error DescripLion
1he Progld_ParenL '[]' in Lhe Progld Lable is noL a
valid Progld.
1here is a Progld parenL speciied LhaL is noL lisLed in Lhe
Progld Lable.

%
lCF90 posLs a warning i iL inds LhaL a shorLcuL's direcLory has been speciied as a public properLy. 1he names o
Public ProperLies are wriLLen in uppercase leLLers. A shorLcuL speciied by a public properLy may noL work i Lhe
value o Lhe ALLU5R5 properLy changes.
1his lCF cusLom acLion validaLes Lhe ShorLcuL Lable and uses Lhe DirecLory Lable. l Lhe DirecLory Lable is noL
presenL, iL reLurns wiLhouL validaLing Lhe ShorLcuL Lable and posLs no errors or warnings.
Result
lCF90 posLs Lhe ollowing warning.
lCF90 error DescripLion
1he shorLcuL '[]' has a direcLory LhaL is a public properLy (ALL CAPS) and is
under user proile direcLory. 1his resulLs in a problem i Lhe value o Lhe
ALLU5R5 properLy changes in Lhe Ul sequence.
A shorLcuL's direcLory has
been speciied as a public
properLy.
Example
lCF90 reporLs Lhe ollowing warning or Lhe example.
Copy
1he shortcut 'Shortcut' has a drectory that s a pub1c property {^ C^S)
and s under user pro11e drectory. 1hs resu1ts n a prob1em 1 the va1ue
o1 the ^uSL8S property changes n the u1 sequence.
ln Lhis example, MDlR is under a users proile. lCF90 posLs a warning because Lhe locaLion o Lhe LargeL
direcLory is speciied by a public properLy, MDlR. A user may change MDlR or ALLU5R5 properLy. l
ALLU5R5 is seL or Lhe per-machine insLallaLion conLexL, and MDlR is under a users proile, Lhe shorLcuL ile in
MDlR are copied under Lhe "All Users" proile and noL a parLicular user's proile. l ALLU5R5 is seL or Lhe per-
user insLallaLion conLexL, Lhe shorLcuL ile in MDlR is copied inLo a parLicular user's proile and is noL available
Lo oLher users.
ShorLcuL 1able (parLial)
ShorLcuL DirecLory_
ShorLcuL MDlR
DirecLory 1able (parLial)
DirecLory DirecLory_ParenL
MDlR ProgramMenuFolder

%
lCF9 posLs a warning i a ile, .ini ile, or shorLcuL ile is insLalled inLo a per-user only direcLory. 1hese warnings
are harmless i Lhe package is only used or insLallaLion in Lhe per-user insLallaLion conLexL and never used or
per-machine insLallaLions.
Files, .ini iles, or shorLcuLs in per-user only direcLories are insLalled inLo a parLicular user's proile. Fven i Lhe
user seLs Lhe ALLU5R5 properLy or a per-machine insLallaLions, iles, .ini iles, or shorLcuLs in per-user only
direcLories are noL copied in Lo Lhe "All Users" proile and are noL available Lo oLher users. 1he per-user only
direcLories do noL vary wiLh Lhe ALLU5R5 properLy. 1he ollowing is a lisL o Lhe per-user only direcLories.
O AppDaLaFolder
O FavoriLesFolder
O NeLHoodFolder
O PersonalFolder
O PrinLHoodFolder
O RecenLFolder
O Send1oFolder
O MyPicLuresFolder
O LocalAppDaLaFolder
Result
lCF9 posLs Lhe ollowing warnings.
lCF9 warning DescripLion
1he ile '[]' will be insLalled Lo Lhe per user direcLory '[2]' LhaL
does noL vary based on ALLU5R5 value. 1his ile won'L be
copied Lo each user's proile even i a per machine insLallaLion is
desired.
1he ile is insLalled inLo a per-user only
direcLory. lL is noL insLalled inLo each user's
proile during a per-machine insLallaLion.
1he lniFile '[]' will be insLalled Lo Lhe per user direcLory '[2]' LhaL
does noL vary based on ALLU5R5 value. 1his ile won'L be
1he .ini ile is insLalled inLo a per-user only
direcLory. lL is noL insLalled inLo each user's
copied Lo each user's proile even i a per machine insLallaLion is
desired.
proile during a per-machine insLallaLion.
1he shorLcuL '[]' will be insLalled Lo Lhe per user direcLory '[2]'
LhaL does noL vary based on ALLU5R5 value. 1his ile won'L be
copied Lo each user's proile even i a per machine insLallaLion is
desired.
1he shorLcuL is insLalled inLo a per-user only
direcLory. lL is noL insLalled inLo each user's
proile during a per-machine insLallaLion.
Example
lCF9 reporLs Lhe ollowing warnings or Lhe example.
Copy
1he 11e 'I1e' w11 be nsta11ed to the per user drectory 'MycturesIo1der' that
does not vary based on ^uSL8S va1ue. 1hs 11e won't be coped to each user's
pro11e even 1 a per machne nsta11aton s desred.

1he 1nI1e '1nI1e' w11 be nsta11ed to the per user drectory 'My1n0r' that
does not vary based on ^uSL8S va1ue. 1hs 11e won't be coped to each user's
pro11e even 1 a per machne nsta11aton s desred.

1he shortcut 'Shortcut' w11 be nsta11ed to the per user drectory 'MyShortcut0r'
that does not vary based on ^uSL8S va1ue. 1hs 11e won't be coped to each user's
pro11e even 1 a per machne nsta11aton s desred.
File 1able (parLial)
File ComponenL_
File C
ComponenL 1able (parLial) (parLial) (parLial) (parLial)
ComponenL DirecLory_
C MyDir
lniFile 1able
lniFile DirProperLy
lniFile MylniDir
ShorLcuL 1able
ShorLcuL DirecLory_
ShorLcuL MyShorLcuLDir
DirecLory 1able
DirecLory DirecLory_ParenL
MyDir FavoriLesFolder
MylniDir LocalAppDaLaFolder
MyShorLcuLDir PersonalFolder

%
lCF92 veriies LhaL a componenL wiLhouL a ComponenL ld CUlD is noL also speciied as a permanenL componenL.
1his lCF cusLom acLion checks Lhe ComponenL 1able or componenLs wiLhouL a CUlD speciied in Lhe
ComponenLld ield and veriies LhaL Lhe msidbComponentAttributes!ermanent lag has noL been seL in Lhe
ALLribuLes ield. lCF92 also veriies LhaL no componenL has boLh Lhe msidbComponentAttributes!ermanent
and msidbComponentAttributesUninstaIIOn5upersedence aLLribuLes.
l Lhe ComponenLld column is null, Lhe insLaller does noL regisLer Lhe componenL and Lhe componenL cannoL be
removed or repaired by Lhe insLaller.
Result
lCF92 posLs Lhe ollowing error.
lCF92 error DescripLion
1he ComponenL '[]' has no
ComponenLld and is marked
as permanenL.
1he enLry or Lhis componenL in Lhe ComponenL Lable has null in Lhe
ComponenLld column and has msidbComponentAttributes!ermanent in
Lhe ALLribuLes column.
lCF92 posLs Lhe ollowing warning.
lCF92 warning DescripLion
1he ComponenL '[]' is marked as
permanenL and uninsLall-on-
supersedence. 1he uninsLall-on-
supersedence aLLribuLe will be
ignored because Lhe componenL is
permanenL.
1he enLry or Lhis componenL in Lhe ComponenL Lable has boLh Lhe
msidbComponentAttributes!ermanent and
msidbComponentAttributesUninstaIIOn5upersedence aLLribuLes
speciied.
Example
lCF92 reporLs Lhe ollowing error or Lhe example.
Copy
1he Component 'Component' has no Component1d and s marked as permanent.
ComponenL 1able (parLial)
ComponenL ComponenLld DirecLory_ ALLribuLes KeyPaLh
ComponenL DirecLoryA 6 FileA

%
lCF93 issues a warning i a cusLom acLion uses Lhe same name as a sLandard acLion. For a lisL o all sLandard
acLion names, see SLandard AcLions Reerence.
Result
lCF93 posLs Lhe ollowing warning.
lCF93 warning DescripLion
1he CusLom acLion '[]' uses Lhe same
name as a sLandard acLion.
1here is an idenLiier in Lhe AcLion column o Lhe CusLomAcLion Lable
LhaL is Lhe name o a Windows lnsLaller sLandard acLion.

%
lCF94 checks Lhe ShorLcuL Lable, FeaLure Lable, and MsiAssembly Lable and posLs a warning i Lhere are any
unadverLised shorLcuLs poinLing Lo an assembly ile in Lhe global assembly cache. l Lhe enLry in Lhe 1argeL ield
o Lhe ShorLcuL Lable is noL a eaLure in Lhe FeaLure Lable, Lhe shorLcuL is unadverLised. l Lhe enLry in Lhe
ComponenL_ ield o Lhe ShorLcuL Lable is also lisLed in Lhe MsiAssembly Lable, Lhe shorLcuL poinLs Lo an
assembly ile. l Lhe enLry in Lhe File_ApplicaLion ield in Lhe MsiAssembly Lable is empLy, Lhe assembly ile is in
Lhe global assembly cache.
Result
lCF94 posLs Lhe ollowing warning.
lCF94 warning DescripLion
1he non-adverLised shorLcuL '[2]' poinLs Lo an assembly
ile in Lhe global assembly cache.
An unadverLised shorLcuL is poinLing Lo an assembly
ile in Lhe global assembly cache.
Example
lCF94 reporLs Lhe ollowing error or Lhe example.
Copy
1he non-advertsed shortcut 'shortcut' ponts to an assemb1y 11e n the g1oba1
assemb1y cache.
5hortcut TabIe partiaI)
ShorLcuL ComponenL_ 1argeL
shorLcuL c [ile]
shorLcuL2 c2 eaLure
shorLcuL3 c3 [ile2]
leature TabIe partiaI)
FeaLure
eaLure
MsiAssembIy TabIe partiaI)
ComponenL_ File_ApplicaLion
c
c2
c3 a

%
lCF95 checks Lhe ConLrol Lable and 88ConLrol Lable Lo veriy LhaL Lhe billboard conLrols iL onLo all Lhe
billboards.
Result
l any o Lhe ollowing are Lrue, a billboard conLrol ails Lo iL on a billboard. lCF95 posLs Lhe ollowing warnings.
lCF95 warning DescripLion
1he 88ConLrol iLem '[].[2]' in Lhe 88ConLrol Lable does noL iL in all Lhe
billboard conLrols in Lhe ConLrol Lable. 1he X coordinaLe exceeds Lhe
boundary o Lhe minimum billboard conLrol widLh %s
1he conLrol's X coordinaLe is
ouLside Lhe widLh o Lhe billboard.
1he 88ConLrol iLem '[].[2]' in Lhe 88ConLrol Lable does noL iL in all Lhe
billboard conLrols in Lhe ConLrol Lable. 1he coordinaLe exceeds Lhe
boundary o Lhe minimum billboard conLrol heighL %s
1he conLrol's coordinaLe is below
Lhe boLLom o Lhe billboard.
1he 88ConLrol iLem '[].[2]' in Lhe 88ConLrol Lable does noL iL in all Lhe
billboard conLrols in Lhe ConLrol Lable. 1he X coordinaLe and Lhe widLh
combined LogeLher exceeds Lhe minimum billboard conLrol widLh %s
1he conLrol's X coordinaLe plus Lhe
conLrol's widLh is ouLside Lhe widLh
o Lhe billboard.
1he 88ConLrol iLem '[].[2]' in Lhe 88ConLrol Lable does noL iL in all Lhe
billboard conLrols in Lhe ConLrol Lable. 1he coordinaLe and Lhe heighL
combined LogeLher exceeds Lhe minimum billboard conLrol heighL %s
1he conLrol's coordinaLe plus Lhe
conLrol's heighL is below Lhe
boLLom o Lhe billboard.
Example
lCF95 reporLs Lhe ollowing warnings or Lhe example.
Copy
1he 88Contro1 tem 'b11board.bbcontro1' n the 88Contro1 tab1e does not 1t n a11
the b11board contro1s n the Contro1 tab1e. 1he x coordnate exceeds the boundary o1
the mnmum b11board contro1 wdth
1he 88Contro1 tem 'b11board.bbcontro1' n the 88Contro1 tab1e does not 1t n a11
the b11board contro1s n the Contro1 tab1e. 1he Y coordnate exceeds the boundary o1
the mnmum b11board contro1 heght
1he 88Contro1 tem 'b11board.bbcontro12' n the 88Contro1 tab1e does not 1t n a11
the b11board contro1s n the Contro1 tab1e. 1he x coordnate and the wdth combned
together exceeds the mnmum b11board contro1 wdth
1he 88Contro1 tem 'b11board.bbcontro14' n the 88Contro1 tab1e does not 1t n a11
the b11board contro1s n the Contro1 tab1e. 1he Y coordnate and the heght combned
together exceeds the mnmum b11board contro1 heght
ConLrol 1able (parLial) (parLial)
ConLrol 1ype WidLh HeighL
conLrol 8illboard 300 00
ConLrol2 8illboard 00 300
88ConLrol Lable
8illboard_ 88ConLrol X WidLh HeighL
billboard bbconLrol 200 0 00 00
billboard bbconLrol2 0 200 00 00
billboard bbconLrol3 50 0 00 50
billboard bbconLrol4 0 50 50 00

%
lCF96 veriies LhaL Lhe PublishFeaLures acLion and Lhe PublishProducL acLion are enLered in Lhe
AdvLFxecuLeSequence Lable. A package cannoL be adverLised wiLhouL Lhese acLions.
Result
lCF96 posLs Lhe ollowing warnings.
lCF96 warning DescripLion
1he PublishFeaLures acLion is required in Lhe
AdvLFxecuLeSequence Lable.
A package cannoL be adverLised wiLhouL Lhe PublishFeaLures
acLion included in Lhe AdvLFxecuLeSequence Lable.
1he PublishProducL acLion is required in Lhe
AdvLFxecuLeSequence Lable.
A package cannoL be adverLised wiLhouL Lhe PublishProducL
acLion included in Lhe AdvLFxecuLeSequence Lable.

%
lCF97 veriies LhaL Lwo componenLs do noL isolaLe a shared componenL Lo Lhe same direcLory.
Result
lCF97 posLs Lhe ollowing warnings.
lCF97 Warning DescripLion
1his componenL [] insLalls Lhe Shared componenL inLo Lhe same
direcLory [2] as anoLher, which breaks componenL rules i boLh (or more)
componenLs are selecLed or insLall.
1wo componenLs musL noL isolaLe a
shared componenL Lo Lhe same
direcLory.
For example, ComponenL and ComponenL2, which share ComponenLShared, are insLalled Lo Lhe same
direcLory. 8oLh speciy ComponenLShared as an isolaLed componenL. 8ecause o Lhe isolaLion, Lhe iles in
ComponenLShared are copied Lwice inLo Lhe DirecLory_ reerence or ComponenL and ComponenL2. 1he
componenLs now have one reerence counL on Lhe copy o iles. 1his is in violaLion o Lhe lnsLaller componenL
rules. l ComponenL is uninsLalled, Lhe isolaLed componenLs iles are removed and ComponenL2 is broken.
%%
lCF98 veriies Lhe descripLion ield o Lhe OD8CDaLaSource 1able or an OD8C daLa source. lL uses Lhe
5QLVaIidD5N uncLion Lo check LhaL only valid characLers are used, and LhaL Lhe descripLion does noL exceed
Lhe maximum allowed lengLh.
Result
lCF98 posLs Lhe ollowing warnings.
lCF98 warning DescripLion
1he daLa source
name is invalid.
1he value in Lhe DescripLion column o Lhe OD8CDaLaSource 1able eiLher conLains invalid
characLers or is Loo long, which means LhaL iL exceeds Lhe SQL_MAX_DSN_LFNC1H o 32.
Example
lCF98 reporLs Lhe ollowing warnings or Lhe example.
Copy
1he data source name s nva1d: !
1he data source name s nva1d: <Strng o1 1ength > 2>

OD8CDaLaSource 1able (parLial)
DaLaSource DescripLion
8adChar !
1ooLong <SLring o lengLh > 32>

%%
lCF99 veriies LhaL no properLy name enLered in Lhe DirecLory Lable duplicaLes a name reserved or Lhe public or
privaLe use o Lhe Windows lnsLaller.
Result
lCF99 posLs Lhe ollowing error.
lCF99 error DescripLion
1he direcLory name. [] is Lhe same as one o Lhe
MSl Public ProperLies and can cause unoreseen side
eecLs.
1he value in Lhe DirecLory column o Lhe DirecLory Lable
duplicaLes a properLy name reserved by Lhe Windows
lnsLaller.
Example
lCF99 reporLs Lhe ollowing error or Lhe example.
Copy
Custom^cton0ata s the same as one o1 the MS1 ub1c ropertes and can cause
un1oreseen sde e11ects.

DirecLory (parLial)
DirecLory DirecLory_ParenL DeaulLDir
CusLomAcLionDaLa
1o correcL Lhis warning you should change Lhe name o CusLomAcLionDaLa.

lCF00 checks Lhe auLhoring o Lhe MsiFmbeddedUl Lable and Lhe MsiFmbeddedChainer Lable.
Result
lCF00 posLs Lhe ollowing errors.
lCF00 error DescripLion
1oo many DLLs marked
as Ul. []
1he ALLribuLes column o Lhe MsiFmbeddedUl Lable conLains Loo many DLLs marked
as a user inLerace DLL. Only one DLL should be marked as a user inLerace DLL.
Ul DLL cannoL have
null/zero message ilLer.
[]
A DLL marked as a user inLerace DLL in Lhe ALLribuLes column o Lhe
MsiFmbeddedUl Lable has null in Lhe MessageFilLer ield. l a row reerences a user
inLerace DLL, Lhe value in MessageFilLer ield should noL be null.
Resource DLLs musL
have null/zero message
ilLers. []
A DLL noL marked as a user inLerace DLL in Lhe MsiFmbeddedUl Lable musL have
null in Lhe MessageFilLer ield. 1his ield should be null i a row reerences a resource
ile and Lhe value o ALLribuLes is null.
MulLiple DLLs marked
wiLh Lhis ilename. [2]
(index. [])
MulLiple DLLs in Lhe MsiFmbeddedUl Lable have Lhe same ile name. 1he FileName
column should noL conLain duplicaLe names.
lCF00 posLs Lhe ollowing warning.
lCF00 warning DescripLion
MulLiple chainers exisL in
MsiFmbeddedChainer Lable. Please
ensure LhaL only one is condiLioned
Lo run.
1here are mulLiple enLries in Lhe MsiFmbeddedChainer Lable. Only one
embedded chainer can be launched. l mulLiple enLries are boLh
condiLioned Lo run, iL is undeined which enLry will run. l Lhe user is
sure LhaL only one enLry's condiLion can resolve Lo Lrue, Lhis warning can
be ignored.

veriies LhaL no value in Lhe FeaLure column o Lhe FeaLure Lable exceeds a maximum lengLh o 38 characLers.
windows lnstaIIer 4.5 or earIier. NoL supporLed. 1his lCF is available beginning wiLh Windows lnsLaller 5.0.

validaLes Lhe MsiServiceConig and MsiServiceConigFailureAcLions Lables.


veriies LhaL Lhe value in Lhe FvenL column in Lhe MsiServiceConig and MsiServiceConigFailureAcLions Lables is
msidb5erviceConfigventlnstaII, msidb5erviceConfigventUninstaII, or
msidb5erviceConfigventReinstaII. veriies LhaL Lhe value in Lhe ComponenL_ column in Lhe MsiServiceConig
and MsiServiceConigFailureAcLions Lables is a valid key inLo Lhe ComponenL 1able.
veriies LhaL Lhe values in Lhe Conig1ype column o Lhe MsiServiceConig Lable is one o Lhe allowed values.
veriies LhaL Lhe values in Lhe AcLions and Lhe Delayed AcLions columns o Lhe MsiServiceConigFailureAcLions
Lable are separaLed by [~]. veriies LhaL Lhe number o values lisLed in Lhe AcLions column and Lhe number o
values lisLed in Lhe Delayed AcLions column in each row o Lhe MsiServiceConigFailureAcLions Lable are Lhe
same.
l Lhe value in Lhe Conig1ype ield in Lhe MsiServiceConig Lable is 5RVlC_CONllG_DLAYD_AUTO_5TART
Lhe value in Lhe ArgumenL ield musL be 0 or .
l Lhe value in Lhe Conig1ype ield in Lhe MsiServiceConig Lable is
5RVlC_CONllG_RQUlRD_!RlVlLG5_lNlO Lhe value in Lhe ArgumenL ield musL conLain a valid sLring o
!riviIege Constants.
l Lhe value in Lhe Conig1ype ield in Lhe MsiServiceConig Lable is 5RVlC_CONllG_5RVlC_5lD_lNlO Lhe
value in Lhe ArgumenL ield musL be 5RVlC_5lD_TY!_NON, 5RVlC_5lD_TY!_R5TRlCTD, or
5RVlC_5lD_TY!_UNR5TRlCTD.
l Lhe value in Lhe Conig1ype ield in Lhe MsiServiceConig Lable is 5RVlC_CONllG_!R5UTDOwN_lNlO
Lhe value in Lhe ArgumenL ield musL be posiLive or empLy. l Lhe value in Lhe Conig1ype ield in Lhe
MsiServiceConig Lable is 5RVlC_CONllG_lAlLUR_ACTlON5_lLAG Lhe value in Lhe ArgumenL ield musL
conLain 0 or .
windows lnstaIIer 4.5 or earIier. NoL supporLed. 1his lCF is available beginning wiLh Windows lnsLaller 5.0.
Result
lCF02 posLs Lhe ollowing errors.
lCF02 error DescripLion
ln Lhe MsiServiceConig Lable enLry (MsiServiceConig
= )[], Conig1ype =%d is noL a valid parameLer. lL
should be beLween 3 and 7.
1he Conig ield o Lhe MsiServiceConig Lable does
noL conLain one o Lhe allowed values.
ln Lhe MsiServiceConig Lable enLry (MsiServiceConig
= )[], ArgumenL =%s is noL a valid %s parameLer. lL
should be %s.
1he ArgumenL ield o Lhe MsiServiceConig Lable
does noL conLain one o Lhe allowed values.
ln Lhe MsiServiceConigFailureAcLions Lable enLry
(MsiServiceConigFailureAcLions = )[], AcLions=[3] is
noL a valid parameLer. lL should be a lisL o null-
separaLed non-negaLive inLegers.
1he AcLions ield o Lhe
MsiServiceConigFailureAcLions does noL conLain an
array o posiLive inLegers. SeparaLe Lhe values in Lhe
array by [~].
ln Lhe MsiServiceConigFailureAcLions Lable enLry
(MsiServiceConigFailureAcLions = )[],
DelayAcLions=[4] is noL a valid parameLer. lL should be
a lisL o null-separaLed non-negaLive inLegers.
1he DelayAcLions ield o Lhe
MsiServiceConigFailureAcLions does noL conLain an
array o posiLive inLegers. SeparaLe Lhe values in Lhe
array by [~].
ln Lhe MsiServiceConigFailureAcLions Lable enLry
(MsiServiceConigFailureAcLions = )[], number o
AcLions (=%d) is noL equal Lo Lhe number o
DelayAcLions (=%d). 1hey should be equal.
1he number o elemenLs in Lhe AcLions and Lhe
DelayAcLions ields o Lhe
MsiServiceConigFailureAcLions Lable are noL equal.
1he number o elemenLs in Lhese arrays should be Lhe
same.
lCF02 posLs Lhe ollowing warnings.
lCF04 warning DescripLion
ln Lhe MsiServiceConig Lable enLry (MsiServiceConig =
)[], ArgumenL ield is leL blank. DeaulL preshuLdown
value o 80000 will be used
1he Lime delay is 80000 milliseconds because Lhe
ArgumenL ield o Lhe MsiServiceConig Lable is
blank.
ln Lhe MsiServiceConigFailureAcLions Lable enLry
(MsiServiceConigFailureAcLions = )[], ReseLPeriod is leL
blank. lL will be replaced wiLh lNFlNl1F.
1he ailure counL is never be reseL because Lhe
ReseLPeriod ield o Lhe
MsiServiceConigFailureAcLions is blank.

lCF 03 veriies Lhe MsiPrinL and MsiLaunchApp conLrol evenLs.


lCF 03 veriies LhaL Lhe MsiPrinL conLrol evenL is used only on a dialog box wiLh a Scrollable1exL conLrol.
windows lnstaIIer 4.5 or earIier. NoL supporLed. 1his lCF is available beginning wiLh Windows lnsLaller 5.0.

lCF 04 veriies LhaL only one o Lhe Lwo Lables. MsiLockPermissionsFx and LockPermissions is presenL in Lhe
package.
lCF 04 veriies Lhe synLax used in Lhe LockObjecL, 1able, and SDDL1exL ields in Lhe MsiLockPermissionsFx
Lable. lCF 04 does noL veriy LhaL Lhe value in Lhe SDDL1exL ield in Lhe MsiLockPermissionsFx Lable is a valid
securiLy descripLor.
windows lnstaIIer 4.5 or earIier. NoL supporLed. 1his lCF is available beginning wiLh Windows lnsLaller 5.0.
Result
lCF 04 posLs Lhe ollowing errors.
lCF04 error DescripLion
8oLh Lables LockPermissions and MsiLockPermissionsFx
exisL in Lhe daLabase. Only one such Lable should be
presenL.
A package cannoL conLain boLh Lhe
MsiLockPermissionsFx and LockPermissions Lables.
Could noL ind iLem '[2]' in Lable '[3]' which is reerenced
in Lhe MsiLockPermissionsFx Lable enLry
(MsiLockPermissionsFx = )[]
Windows lnsLaller is unable Lo ind and secured an
iLem speciied in Lhe MsiLockPermissionsFx Lable.
ln Lhe MsiLockPermissionsFx Lable enLry
(MsiLockPermissionsFx = )[], SDDL1exL = %s appears Lo
be an invalid FormaLLedSDDL1exL value
1he value in Lhe SDDL1exL ield o Lhe
MsiLockPermissionsFx Lable is required Lo be a valid
lormatted5DDLText daLa Lype.

validaLes Lhe package againsL a seL o requiremenLs or insLallaLion in Lhe per-user conLexL. lCF 05 can also
validaLe dual-purpose packages. A dual-purpose package enables a user Lo selecL wheLher Lo insLall Lhe
applicaLion in Lhe per-user conLexL or per-machine conLexL. For inormaLion abouL developing a dual-purpose
package, see Single Package AuLhoring.
lCF 05 perorms Lhe ollowing validaLion o Lhe package.
O Checks LhaL Lhe CusLomAcLion Lable conLains no cusLom acLions LhaL have been marked Lo run wiLh
elevaLed privileges. For more inormaLion abouL elevaLed cusLom acLions, see CusLom AcLion SecuriLy.
O Checks LhaL Lhe DirecLory Lable does noL include any o Lhe ollowing sysLem older properLies.
4 AdminTooIsloIder
4 CommonAppDataloIder
4 lontsloIder
4 5ysteml6loIder
4 5ystem64loIder
4 5ystemloIder
4 TemploIder
4 windowsloIder
4 windowsVoIume
O veriies LhaL Lhe package does noL insLall a common language runLime assembly Lo Lhe global
assembly cache (CAC.) For more inormaLion abouL insLalling assemblies Lo Lhe global assembly cache,
see Adding Assemblies Lo a Package and lnsLallaLion o Common Language RunLime Assemblies.
O Checks Lhe OD8CDaLaSource Lable Lo veriy LhaL Lhe package does noL insLall any daLa sources.
O Checks Lhe ServicelnsLall Lable Lo veriy LhaL Lhe package does noL insLall any services.
O Checks LhaL Lhe RegisLry Lable wriLes no enLries under Lhe Y_LOCAL_MAClN key.
windows lnstaIIer 4.5 or earIier. NoL supporLed. 1his lCF is available beginning wiLh Windows lnsLaller 5.0.



ICE Errors ExpIained and possibIe soIutions

lCL03 L88C8
lnvalld fllename/usage of wlldcards
1able xxxxxxxx Column xxxxxxxx
key(s) xxxxxxxx ln 8emovellle Lable
1he flle was down Lo be removed buL was
noL ln Lhe llle Lable Lo be added so
removed
(a) Lhe enLry ln 8emovellle Lable
(b) Lhe enLry ln ComponenL Lable
Cr ensure LhaL Lhe flle ls ln Lhe llle Lable lf lL
ls requlred
lCL03 L88C8
lnvalld fllename (unllkely problem) ln
llle or lnlllle Lable (perhaps elsewhere)
A flle called ` Cr someLhlng slmllar wlll
noL be recognlsed by Lhe wlndows lnsLaller
1he usage of Lhls slngle symbol as a flle
name ls lnvalld and generaLes Lhe error
however $ as a fllename wlll valldaLe 1hls
error ls also llkely Lo occur wlLh fllenames
where Lhe flrsL characLer ls
lCL03 L88C8
lnvalld fllename/lnlllle Lable 1able
lnlllle Column llle
lnl flle names conLaln spaces lnslde Lhe
shorLflle name ueleLe Lhe spaces lnslde Lhe
shorL flle names Leave Lhe long flle names
alone
lCL03 L88C8
lnvalld formaL sLrlng 1able 8eglsLry
Column key key(s) 5ttloqNome
8eglsLry Lable
Check Lhe synLax of Lhe key 5ttloqNome ln
Column key may be a mlsslng Lhese
brackeLs or Lhey need Lo be closed ln
LhaL sLrlng
lCL03 L88C8 lnvalld Culu sLrlng 8e sure Culu ls all uL8 case
lCL03 L88C8
lnvalld ldenLlfler 1able 8emovellle
Column ComponenL_ key(s)
xxxxxxxxx lound ln 8emovellle Lable
Check Lhe ComponenL lu
lCL03 L88C8
lnvalld Language ld 1able llle Column
Language key(s) llle xxxxxxxx ln llle
Lable
Look aL Lhe language seL agalnsL oLher flles
elLher change Lhe enLry Lo Lhe same
language as oLher flles change lL Lo 0 or
remove Lhe language compleLely
lCL03 L88C8
noL a valld forelgn key 1able
ComponenL Column ulrecLory_ key(s)
ulrecLory xxxxxx ln ComponenL Lable
forelgn key wlll be a dlrecLory LhaL has noL
been llsLed ln Lhe ulrecLory Lable
lCL03 L88C8
noL a valld forelgn key 1able Class
Column lcon_ key(s) classld
conLexL componenL_ ln Class
Lable
1he lncorrecL lcon lu was ln Lhe lcon_
column Lookup Lhe correcL lcon_ ld ln Lhe
lcon Lable and copy lL Lo Lhe lcon_ column ln
Lhe Class Lable 1he exacL paLh can be
copled
lCL03 L88C8
noL a valld forelgn key 1able rogld
Column Class_ key(s) xxxxxxxx ln
forelgn key wlll be a class LhaL has noL been
llsLed ln Lhe Class Lable
rogld Lable
lCL03 WA8nlnC
SLrlng overflow (greaLer Lhan lengLh
permlLLed ln column) 1able llle
Column Language key(s) llle
xxxxxxxx
Look aL Lhe language seL agalnsL oLher flles
elLher change Lhe enLry Lo Lhe same
language as oLher flles or remove Lhe
language compleLely
lCL04 L88C8
llle Myllle Sequence 210 CreaLer
1han Max Allowed by Medla 1able
AmmounL ln Lhe medla Lable
valldaLes LhaL Lhe sequence number of every
flle ln Lhe flle 1able ls less Lhan or equal Lo
Lhe largesL sequence number ln Lhe
LasLSequence column of Lhe Medla 1able
Check Lhe number of flles ln Lhe sequence
column and ad[usL Lhls Lo lasL enLry ln Lhe
medla Lable
lCL09 L88C8
ComponenL mpoeoetNome ls a
nonpermanenL sysLem componenL
1hls ls an accepLable error however Lo make
Lhe componenL a permanenL sysLem
componenL Lhen glve lL a value of 24 ln Lhe
ALLrlb column
lCL13 L88C8
MlML 1ype AppNome referenced by
exLenslon xt
AppNome does noL map Lo an exLenslon
wlLh a clrcular reference LxLenslon 8emove
Lhe enLry from MlML column ln LxLenslon
Lable
lCL18 L88C8
keyaLh for ComponenL xxxxxxxx ls
ulrecLory xxxxxxxx
1he ulrecLory/ComponenL palr musL be
llsLed ln Lhe CreaLelolder Lable ln
CreaLelolder Lable Add an enLry Lo
CreaLelolder Lable uslng Lhe relevanL
ulrecLory and ComponenL deLalls
lCL19 L88C8
LxLenslon xxxxxxx adverLlses
componenL LxLenslon 1hls componenL
cannoL be adverLlsed because Lhey
keyaLh Lype dlsallows lL
1hls ls an empLy componenL deleLe lL
lCL21 L88C8
ComponenL MyComponenL does noL
belong Lo any leaLure ln
leaLureComponenLs Lable
Add an enLry Lo leaLureComponenLs Lable
wlLh Lhe followlng enLrles
(a) leaLure_ A resenL leaLure
(b) ComponenL_ MyComponenL
lCL24 L88C8
upgradeCode none ls an lnvalld
Wlndows lnsLaller Culu ln roperLy
Lable
Modlfy Lhe upgradeCode fleld enLry ln
roperLy Lable use Culu CeneraLor Lo
generaLe a unlque ld and copy Lhls ld lnLo
Lhe upgradeCode fleld
lCL27 L88C8
unknown acLlon AcLlon1 of
lnsLallLxecuLeSequnence Lable noL a
sLandard acLlon and noL found ln
CusLomAcLlon or ulalog Lables
1here ls an acLlon llsLed ln Lhe sequence
Lable lndlcaLed LhaL ls noL a sLandard
acLlons a cusLom acLlon llsLed ln
Lhe CusLomAcLlon Lable or a dlalog box
llsLed ln Lhe ulalog Lable
lCL32 L88C8
osslble mlsallgned forelgn keys feaLure
s32 leaLureComponenLsleaLure_
s38
1hls error occurs wlLh a WlnlnsLall dlsco32
capLures and ls usually an accepLable Lrror
lCL33 Warnlng
8eg key xxxxxxxx ls used ln an
unsupporLed way Shell exLenslon verbs
lnformaLlon should be reglsLered vla Lhe
verb Lable
1hls enLry may overwrlLe a value creaLed
Lhrough LhaL Lable varlous
(a) check verb Lable for exLenslons
(b) check LxLenslons Lable for same
exLenslons
(c) copy Lhe value from Lhe 8eglsLry Lable
Lo Lhe ArgumenL column ln Lhe verb Lable
(d) deleLe Lhe enLry from Lhe 8eglsLry
Lable
lCL33 Warnlng
8eg key xxxxxxxx ls used ln an
unsupporLed way rogld CLSlu
assoclaLlons should be reglsLered vla Lhe
rogld and Class Lables 1hls enLry may
overwrlLe a value creaLed Lhrough Lhose
Lables
lCL33 Lrrors generally can be lgnored
provldlng LhaL Lhere ls noL an enLry ln Lhe
roglu 1ypeLlb ClSlu 1able
lCL33 Warnlng
8eg key xxxxxxx ls used ln an
unsupporLed way 1ypeLlb PLLul8
should be reglsLered vla Lhe 1ypellb
Lable
1hls enLry may overwrlLe a value creaLed
Lhrough LhaL Lable 8eglsLry Lable
(a) add an enLry Lo Lhe 1ypellb Lable
(b) deleLe Lhe enLry from Lhe 8eglsLry
Lable
lCL33 Warnlng
8eg key xxxxxxxx ls used ln an
unsupporLed way CLSlus should be
reglsLered vla Lhe Class Lable
1hls enLry may overwrlLe a value creaLed
Lhrough LhaL Lable
(a) add an enLry Lo Lhe Class Lable
(b) deleLe Lhe enLry from Lhe 8eglsLry
Lable
lCL33 Warnlng
8eg key xxxxxxxx ls used ln an
unsupporLed way rogld lcon
assoclaLlons should be reglsLered vla Lhe
rogld and lcon Lables
1hls enLry may overwrlLe a value creaLed
Lhrough Lhose Lables
lCL36 Warnlng
lcon 8loaL lcon xxxxxxxx ls noL used ln
Lhe Class ShorLcuL or roglu Lable 1hls
adversely affecLs performance
lf Lhe lcon can be used ln elLher Lhe Class
ShorLcuL or rogld Lables Lhen use lL
oLherwlse deleLe lL as lL?s noL requlred
lCL38 L88C8
ComponenL xxxxxxxx lnsLalls Lo user
proflle lL musL use a reglsLry key under
PkCu as lLs keyaLh noL a flle
(a) flnd all occurrences of Lhls componenL
usually ln CreaLelolder Lable (along wlLh
ComponenL Lable and leaLureComponenL
Lable)
(b) add an enLry Lo Lhe 8eglsLry Lable wlLh
Lhe followlng deLalls
8eg 8eglsrLyxxx 8ooL 1 (for
PkCu) 2 (for PkLM)
key SofLwarexxxxxxulrecLorles
name componenL Culu
value dlrecLory ld
Comp componenL ld
(c) copy Lhe 8eglsLry ld lnLo Lhe keyaLh
column of Lhe componenL ln Lhe
ComponenL Lable
(d) change Lhe 0 ln ALLrlbuLes column Lo 4
lCL38 L88C8
ComponenL xxxxxxxx lnsLalls Lo user
proflle lL musL use a reglsLry key under
PkCu as lLs keyaLh 1he keyaLh ls
currenLly nuLL
llnd all occurrences of Lhls componenL lf ln
ShorLcuL Lable (along wlLh ComponenL Lable
and leaLureComponenL Lable)
a) add an enLry Lo Lhe 8eglsLry Lable wlLh
Lhe followlng deLalls
8eg leaLurexxx 8ooL 1 (for
PkCu) 2 (for PkLM)
key SofLwarexxxxxxxShorLcuLs
name componenL Culu
value shorLcuL ld
Comp componenL ld
b) copy Lhe 8eglsLry ld lnLo Lhe keyaLh
column of Lhe componenL ln Lhe
ComponenL Lable

llnd all occurrences of Lhls componenL lf ln
llle Lable (along wlLh ComponenL Lable and
leaLureComponenL Lable)
(a) add an enLry Lo Lhe 8eglsLry Lable wlLh
Lhe followlng deLalls
8eg leaLurexxx
8ooL 1 (for PkCu)
key SofLwarexxxxxxllles
name componenL Culu
value flle ld
Comp componenL ld
(b) copy Lhe 8eglsLry ld lnLo Lhe keyaLh
column of Lhe componenL ln Lhe
ComponenL Lable

llnd all occurrences of Lhls componenL lf ln
8eglsLry Lable
lCL43 L88C8
ComponenL xxxxxxx has non
adverLlsed shorLcuLs lL should use a
reglsLry key under PkCu as lLs keyaLh
noL a flle ComponenL Lable
CreaLe a dummy regkey wlLh a value of 1 for
PkCu Change Lhe aLLrlbuLes ln Lhe
componenL Lable Lo 4 add Lhe new dummy
key as Lhe key paLh for Lhls componenL Add
Lhe componenL ln Lhe reglsLry Lable as Lhe
componenL
lCL46 L88C8
roperLy AuuLocal deflned ln roperLy
Lable dlffers from anoLher deflned
properLy only by case
ueleLe AuuLocal properLy and add Lhe
properLy ln Caps and deflne as you need eg
ALL
lCL47 L88C8
leaLure My leaLure has xxxx
componenLs 1hls could cause problems
ln Wln9x sysLems ?ou should Lry Lo
have fewer Lhan 817 componenLs per
feaLure
lf Lhe lnsLall ls noL on a wln93 bulld Lhls ls an
accepLable error ln mosL cases
lCL30 Warnlng
1he exLenslon of lcon xxxxxxxx for
shorLcuL My ShorLcuL ls noL exe or
ShorLcuL 1able
Check Lhe fllename belng used for Lhe
shorLcuL and ensure lLs a valld exLenslon
lco (usually dll) lf Lhls ls Lhe case Lhen Lhls ls
an usually an accepLable error
lCL30 L88C8
1he exLenslon of lcon xxxxxxxx for
shorLcuL xxxxxxxx does noL maLch Lhe
exLenslon of Lhe keyllle for componenL
xxxxxxxx
lf Lhe exLenslons of Lhe lcon and Lhe LargeL
flle do noL maLch Lhe shorLcuL wlll noL have
Lhe correcL conLexL menu when Lhe
componenL ls adverLlsed 1o flx Lhls error
rename Lhe lcon Lo maLch Lhe exLenslon of
Lhe LargeL flle
lCL33 L88C8
8eglsLry key xxxxxxx wrlLes uarwln
lnLernal or pollcy lnformaLlon
1hls ls usually reference Lo lnsLaller keys ln
Lhe reglsLry and ls spurlous deleLe Lhem
lCL64 L88C8
1he dlrecLory xxxxxxxx ls ln Lhe user
proflle buL ls noL llsLed ln Lhe
8emovellle Lable
ln 8emovellle Lable
llnd Lhls componenL ln Lhe ComponenL Lable
- ComponenL Lable
(a) add an enLry Lo Lhe 8emovellle Lable
wlLh Lhe followlng deLalls
lllekey xxxxxxx
ComponenL componenL ld
lllename eove book
ulrroperLy dlrecLory ld
lnsLallMode 3

llnd Lhls componenL ln Lhe ComponenL Lable
-@ ComponenL Lable
(a) add an enLry Lo Lhe ComponenL Lable
(b) add an enLry Lo Lhe
leaLureComponenLs Lable
(c) add an enLry Lo Lhe 8emovellle Lable
wlLh Lhe followlng deLalls
lllekey xxxxxxxx
ComponenL componenL ld
lllename eove book
ulrroperLy dlrecLory ld
lnsLall Mode 3