COMPANY.MMH |
Automatically included by "DEPT.MMH", see "Preferred MSI Interface for Building a Complete MSI" for more details...
As a lot of the manipulation this header performs is to "tweek" the Microsoft supplied "uisample.msi", I have created the "UISAMPLE.MMH" header to keep the bulk of these together.
;---------------------------------------------------------------------------- ; ; MODULE NAME: COMPANY.MMH ; ; $Author: USER "Dennis" $ ; $Revision: 1.98 $ ; $Date: 26 May 2022 09:59:30 $ ; $Logfile: D:/DBAREIS/Projects.PVCS/Win32/MakeMsi/Company.mmh.pvcs $ ; COPYRIGHT: (C)opyright Dennis Bareis, Australia, 2003 ; All rights reserved. ; ; Note that this header is one of the few intended to be "replaced". ; It has however been written so physical altering or deleting of this ; file should not be required. ; ; There are many options, some are: ; ; 1. Ignore this file altogether, create your own front end with ; different filenames so as not to clash. ; ; 2. Modify this file BUT if you do so you should move it to a ; different directory so as not be be deleted ALONG WITH YOUR ; CHANGES on a MAKEMSI uninstall! ; ; 3. Create a new header that overrides some things but still includes ; this one. ; ; Let me know of any issues. ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ;--- Define Version number of this install support -------------------------- ;---------------------------------------------------------------------------- #ifdef COMPANY_VERSION ;--- Die, already included ----------------------------------------------- #error ^You have already included "<?InputComponent>"^ #endif #define COMPANY_VERSION 08.202 ;---------------------------------------------------------------------------- ;--- Create our own namespace ----------------------------------------------- ;---------------------------------------------------------------------------- #NextId #NextId LOCK "COMPANY.MMH" ;---------------------------------------------------------------------------- ;--- Does this actually look like Dennis' Development box? ------------------ ;---------------------------------------------------------------------------- #if ['<??*PRJ_INST_PATH?>' <> ''] ;--- My company.mmh etc NOT JUST A SAMPLE! ------------------------------- #define IsMyBox #endif ;---------------------------------------------------------------------------- ;--- Define some company Information ---------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_NAME My Company ;---------------------------------------------------------------------------- ;--- License Options -------------------------------------------------------- ;---------------------------------------------------------------------------- ;###[ListedInDoco-LookForLicenceFileOptions]### #define? COMPANY_LICENCE_SPELLING_C_OR_S c ;;Spelling - Licence OR License? #define? COMPANY_LOOK_FOR_LICENCE_FILE Y ;;Y/N - Look for file or just use if supplied? #define? COMPANY_PREPROCESS_LICENCE_FILE N ;;Y/N - Does sthe file contain macros or decisions etc? #define? COMPANY_LICENCE_EXTN .licen<$COMPANY_LICENCE_SPELLING_C_OR_S>e.rtf ;;US spelling? #define? COMPANY_LICENCE_NAME <?InputFile $$FilePart:w><$COMPANY_LICENCE_EXTN> ;###[ListedInDoco-LookForLicenceFileOptions]### #define? UISAMPLE_LICENCE_SPELLING_C_OR_S <$COMPANY_LICENCE_SPELLING_C_OR_S> ;---------------------------------------------------------------------------- ;--- Modify product info keywords for .VER file ---------------------------- ;---------------------------------------------------------------------------- #ifndef VER_PRODINFO_VALID_KEYWORD_LIST_EXTRA ;--- Extra "prodinfo" KeyWords ------------------------------------------- #define? COMPANY_PRODINFO_VALID_KEYWORD_LIST_EXTRA #( "" #define VER_PRODINFO_VALID_KEYWORD_LIST_EXTRA ,UpgradeCodes ;;A list of EXTRA upgrade codes ,MsiName ;;Short name of MSI (no extension) ,Licence ;;If not supplied then disabled, if starts with "@" then file name follows. ;--- If supplied must begin with a comma ----------------------------- <$COMPANY_PRODINFO_VALID_KEYWORD_LIST_EXTRA> #) ;--- Define any "prodinfo" default values -------------------------------- #define? ProdInfo.Default.UpgradeCodes #define? ProdInfo.Default.Licence #define? ProdInfo.Default.MsiName <$ProdInfo.ProductName><$ProductVersion> #endif ;---------------------------------------------------------------------------- ;--- Add Supported platform details to HTML report's summary ---------------- ;---------------------------------------------------------------------------- #define? COMPANY_HTMLSUMM_AFTER_SUPPORTED_PLATFORMS #define? HTMLSUMM_SUPPORTED_PLATFORMS_TT \ <$HTMLRPT_TT 'This lists platforms we support this product on.'> #define? COMPANY_HTMLSUMM_SUPPORTED_PLATFORMS_BEFORE_LIST #if ['<$DEPT_SUPPORT_WEB_URL $$IsBlank>' = 'Y'] #define? COMPANY_HTMLSUMM_SUPPORTED_PLATFORMS_AFTER_LIST #elseif #( #define? COMPANY_HTMLSUMM_SUPPORTED_PLATFORMS_AFTER_LIST Support can be obtained from "<a href='<$DEPT_SUPPORT_WEB_URL>' title='click to visit the support website' target='_blank'><$DEPT_SUPPORT_WEB_URL></a>". #) #endif #( '' #define? HTMLSUMM_AFTER_BUILT_AT <TR<$HTMLSUMM_SUPPORTED_PLATFORMS_TT>> <TD align="center"> Supported<BR>Platforms </TD> <TD> <$COMPANY_HTMLSUMM_SUPPORTED_PLATFORMS_BEFORE_LIST> <$PLATFORM_MsiSupportedWhereHtml> <$COMPANY_HTMLSUMM_SUPPORTED_PLATFORMS_AFTER_LIST> </TD> </TR> <$COMPANY_HTMLSUMM_AFTER_SUPPORTED_PLATFORMS> #) ;---------------------------------------------------------------------------- ;--- Change way MSI comments are used -------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_PACKAGED_BY Packaged by <$DEPT_NAME> (<$COMPANY_NAME> - <$DEPT_ADDRESS>). #( '' ;--- This can be long but need CRLF for XP bug workaround ---------------- #define? COMPANY_PROPERTY_ARPCOMMENTS <$ProdInfo.Productname><?Space> ;(<$ProductVersion>)<$CRLF> ([ProductVersion])<$CRLF> was created ;#if ['<$COMPANY_PROPERTY_BuildTime $$IsBlank>' = 'Y'] ;;Chicken and egg, need to look closer when have more time <?CompileTime> ;#elseif ; [<$COMPANY_PROPERTY_BuildTime>] ;#endif .<$CRLF><$CRLF> <$ProdInfo.Description><$CRLF> <$COMPANY_PACKAGED_BY><$CRLF><$CRLF> <$PLATFORM_MsiSupportedWhere> #) ;---------------------------------------------------------------------------- ;--- Load MAKEMSI support --------------------------------------------------- ;---------------------------------------------------------------------------- #define HTMLRPT_SHOW_EMPTY_REPORTS N ;;Show reports for "null" entries! #NextId PUSH #include "MakeMsi.MMH" #NextId POP ;---------------------------------------------------------------------------------------- ;--- Allow you to easily "mark" an MSI files as being in a specific mode (test maybe) --- ;---------------------------------------------------------------------------------------- #define? COMPANY_MSINAME_PREFIX #define? COMPANY_MSINAME_SUFFIX #option PUSH DefineMacroReplace=YES #define+ ProdInfo.MsiName <$COMPANY_MSINAME_PREFIX><$ProdInfo.MsiName><$COMPANY_MSINAME_SUFFIX> #option POP ;---------------------------------------------------------------------------- ;--- Define platforms ------------------------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_DEFINE_DEPARTMENTS_PLATFORMS <$COMPANY_DEFINE_DEPARTMENTS_PLATFORMS> ;;Define them <$PlatformProcessing> ;;Thats all of them! ;---------------------------------------------------------------------------- ;--- Start the Package (use template) --------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_MSI_OUTPUT_FILENAME <$ProdInfo.MsiName>.msi #define? COMPANY_MSI_TEMPLATE_FILENAME <??*MAKEMSI_DIR>UISAMPLE.msi ;;Contents of "MAKEMSI_DIR" ends with a slash! #( ;--- Allow user to use another method for getting template data ---------- #define? COMPANY_GET_TEMPLATE_AND_OPEN_MSI <$Msi "<$COMPANY_MSI_OUTPUT_FILENAME>" Template="<$COMPANY_MSI_TEMPLATE_FILENAME>"> #) #define? COMPANY_IMMEDIATELY_AFTER_TEMPLATE_MSI_OPENED <$COMPANY_GET_TEMPLATE_AND_OPEN_MSI> <$COMPANY_IMMEDIATELY_AFTER_TEMPLATE_MSI_OPENED> ;---[4Doco-OptionalResolveSourceInsertion]--- ;---------------------------------------------------------------------------- ;--- Add "ResolveSource" action --------------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_INSERT_ResolveSourceAction N #if ['<$COMPANY_INSERT_ResolveSourceAction>' = 'Y'] ;--- We do wish to insert the "ResolveSource" action -------------------- #define COMPANY_RESOLVE_SOURCE_CONDITION <$CONDITION_EXCEPT_UNINSTALL> #( #define ResolveSource ;;Note that the SOURCE MSI MUST BE AVAILABLE (for example can't enter maintenance mode if MSI gone...) <$Table "{$#1}"> #( ;--- Need to do this or "SourceDir" null if UI=none or basic -------- #ifndef @@RsSeqNumber ;--- Only declare variable once --------------------------------- dim RsSeqNumber<?NewLine> #define @@RsSeqNumber #endif RsSeqNumber = GetSeqNumber("{$#1}", "CostInitialize-CostFinalize", 1) <$Row Action="ResolveSource" ;;Set up the "sourceDir" property/directory Condition=^<$COMPANY_RESOLVE_SOURCE_CONDITION>^ ;;Don't want during uninstall etc (may require source media, CD etc) *Sequence=^RsSeqNumber^ ;;Use Sequence number determined earlier > #) <$/Table> #) <$ResolveSource "InstallUISequence"> <$ResolveSource "InstallExecuteSequence"> #endif ;---[4Doco-OptionalResolveSourceInsertion]--- ;---------------------------------------------------------------------------------------- ;--- Note ORCA bug has caused invalid value for security in the (UISAMPLE) template ----- ;---------------------------------------------------------------------------------------- #define? COMPANY_SECURITY_VALUE_VBEXP PidSecurityNoRestriction ;;VB expression (empty to turn off) #if ['<$COMPANY_SECURITY_VALUE_VBEXP>' <> ''] ;--- Updating of the security "property" not disabled ------------------- <$Summary "Security" *Value=^<$COMPANY_SECURITY_VALUE_VBEXP>^> #endif ;---------------------------------------------------------------------------- ;--- Alter or ADD common "Error" table messages ---------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_ERROR_1335 The required cabinet file '[2]' may be corrupt or we could not create a file during extraction. This could indicate a network error, an error reading from the CD-ROM, a problem with this package, or perhaps a problem extracting a file (destination path too long?). #define? COMPANY_ERROR_1720 CUSTOM ACTION SCRIPT "[2]" COULDN'T START (OR TRAPPED DURING INITIALIZATION*). ERROR [3], [4]: [5] LINE [6], COLUMN [7], [8] #define? COMPANY_ERROR_2740 CUSTOM ACTION SCRIPT "[2]" STARTED BUT FAILED. ERROR [3], [4]: [5] LINE [6], COLUMN [7], [8] #define? COMPANY_ERROR_1721 CUSTOM ACTION "[2]" FAILED (could not start it). LOCATION: [3], COMMAND: [4] #define? COMPANY_ERROR_1722 CUSTOM ACTION "[2]" FAILED (unexpected return code). LOCATION: [3], COMMAND: [4] #define? COMPANY_ERROR_1909 Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it. This can also happen if the "Target" of a shortcut doesn't exist (or not fully qualified) in the MSI. #define? COMPANY_ERROR_2103 Could not resolve path for the shell folder "[2]". If the MSI is being executed under the SYSTEM account then remember that you must have ALLUSERS=1. #define? COMPANY_ERROR_2705 Invalid table: "[2]" - Could not be linked as tree (this can occur if a directory tables "parent" directory is missing). #( #define? COMPANY_ERROR_2755 The server process failed processing the package "[3]" (RC = [2]). A return code of 3 probably indicates a problem accessing the drive or directory (substituted drives and network drives can be problematic). A return code of 110 probably indicates an error opening the MSI file (this can occur if the MSI is encrypted). Try moving the MSI to C:\ (make sure its not compressed or encrypted). #) #( #define @@ErrorMsg #if ['<$COMPANY_ERROR_{$#1} $$ISBLANK>' = 'N'] ;--- User didn't disable this message ------------------------------- <$Row Error="{$#1}" Message=^<$COMPANY_ERROR_{$#1}>^> #endif #) <$Table "Error"> ;--- Current message too misleading -------------------------------------- <$@@ErrorMsg "1335"> ;--- Useful VBS Custom Action messages ----------------------------------- <$@@ErrorMsg "1720"> <$@@ErrorMsg "2740"> ;--- Buggy/Missing/Misleading Messages (we have seen at install time) --- <$@@ErrorMsg "2705"> ;;ICE03 error at validation time, but if not validating... ;--- Readable CA=EXE error messages -------------------------------------- <$@@ErrorMsg "1721"> <$@@ErrorMsg "1722"> ;--- Useful when you try to install MSI in system account! --------------- <$@@ErrorMsg "2103"> <$@@ErrorMsg "2755"> ;--- Shortcut related ---------------------------------------------------- <$@@ErrorMsg "1909"> <$/Table> ;---------------------------------------------------------------------------- ;--- Convert HTML to TEXT in a VB variable ---------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_DISABLE_DESCRIPTION_Html2Text_CONVERSION N ;;You'd only change as a workaround to a serious problem... Let me know if you need to! #( '<?NewLine>' #define Html2Text ;--- Get the HTML in the form that can be placed between dowuble quotes --- #RexxVar @@Html2Text = `{$HTML}` #evaluate ^^ ^@@Html2Text = ReplaceString(@@Html2Text, '"', '""')^ ;--- Only want to use each VB variable once... -------------------------- #ifdef @@VBVAR_{$VBVAR} #error ^We have already used the VB variable "{$VBVAR}"!^ #end if #define @@VBVAR_{$VBVAR} ;--- Generate the VB code ----------------------------------------------- <$Vbs "HTML TO TEXT Conversion"> #if ['<$COMPANY_DISABLE_DESCRIPTION_Html2Text_CONVERSION $$UPPER>' = 'Y'] ;--- UNUSUAL - DISABLED - WHY? (LET ME KNOW) -------------------- dim {$VBVAR} : {$VBVAR} = "<??@@Html2Text>" 'No conversion done - Why not? #elseif ;--- Do the HTML to TEXT conversion ----------------------------- dim {$VBVAR} : {$VBVAR} = Html2Text("<??@@Html2Text>") err.clear() 'Ignore any error in called routine... #endif <$/Vbs> #) ;---------------------------------------------------------------------------- ;--- UISAMPLE.MSI contains an invalid "Billboard" table --------------------- ;---------------------------------------------------------------------------- <$Table "Billboard"> <$TableDelete> <$/Table> ;---------------------------------------------------------------------------- ;--- UISAMPLE.MSI contains an invalid "ListView" validation ----------------- ;---------------------------------------------------------------------------- <$Table "_Validation"> #( <$Row @Where="`Table` = 'ListView' AND `Column` = 'Value'" @OK='=1' Category="Formatted" ;;Previous value = Identifier > #) <$/Table> ;--- Always Need these tables ----------------------------------------------- <$TableCreate "FeatureComponents" DropExisting="N"> ;;Windows Installer will PV in MSI.DLL (in UI sequence) if missing <$TableCreate "File" DropExisting="N"> ;;Windows Installer needs table (even if empty) <$TableCreate "Media" DropExisting="N"> ;;Windows Installer needs table (even if empty) ;---------------------------------------------------------------------------- ;--- Set up some MAKEMSI tables (move eventually?) -------------------------- ;---------------------------------------------------------------------------- <$TableCreate "<$MAKEMSI_TABLENAME_FILESOURCE>"> ;** [CommentBlockStart (23 August 2008 13:08:03, Dennis) ;**+---------------------------------------------------------------------- ;**|<$Table "_Validation"> ;**|#( ;**| <$Row ;**| Table="<$MAKEMSI_TABLENAME_FILESOURCE>" ;**| Column="File_" ;**| Nullable="N" ;**| KeyTable="File" ;**| KeyColumn="1" ;**| Category="Identifier" ;**| Description="Foreign key into the File table." ;**| > ;**|#) ;**|#( ;**| <$Row ;**| Table="<$MAKEMSI_TABLENAME_FILESOURCE>" ;**| Column="SourceFile" ;**| Nullable="N" ;**| Category="Text" ;**| Description="Full name of source file." ;**| > ;**|#) ;**|#( ;**| <$Row ;**| Table="<$MAKEMSI_TABLENAME_FILESOURCE>" ;**| Column="Date" ;**| Nullable="N" ;**| Category="Text" ;**| Description="Proposed date for the file." ;**| > ;**|#) ;**|#( ;**| <$Row ;**| Table="<$MAKEMSI_TABLENAME_FILESOURCE>" ;**| Column="Time" ;**| Nullable="N" ;**| Category="Text" ;**| Description="Proposed time for the file." ;**| > ;**|#) ;**|<$/Table> ;**+---------------------------------------------------------------------- ;** CommentBlockEnd] (23 August 2008 13:08:03, Dennis) #ifndef FILE_DISABLE_MD5_GENERATION_ALTOGETHER <$TableCreate "MsiFileHash"> <$Table "_Validation"> #( <$Row Table="MsiFileHash" Column="File_" Nullable="N" KeyTable="File" KeyColumn="1" Category="Identifier" Description="Foreign key into the File table." > #) #( <$Row Table="MsiFileHash" Column="Options" Nullable="N" Category="Integer" MinValue="0" MaxValue="0" Description="Reserved option (must be 0)." > #) #( #Define HashRow <$Row Table="MsiFileHash" Column="HashPart{$#1}" Nullable="N" Category="DoubleInteger" Description="MD5 part {$#1}/4." > #) <$HashRow "1"> <$HashRow "2"> <$HashRow "3"> <$HashRow "4"> <$/Table> #endif ;---------------------------------------------------------------------------- ;--- Set up the "COMPLETE" feature ------------------------------------------ ;---------------------------------------------------------------------------- #define? COMPANY_WANT_COMPLETE_FEATURE Y #if ['<$COMPANY_WANT_COMPLETE_FEATURE>' = 'Y'] ;--- User did not disable complete feature ------------------------------- ;--[4Doco-COMPANY_WANT_COMPLETE_FEATURE]--- #define? COMPANY_COMPLETE_FEATURE_TITLE Complete #define? COMPANY_COMPLETE_FEATURE_DESCRIPTION The Complete feature #define? COMPANY_COMPLETE_FEATURE_DIRECTORY ;;Must be a "Directory" key (or blank)! #define? COMPANY_COMPLETE_FEATURE_DISPLAY 1 ;;Expanded by default #define? COMPANY_COMPLETE_FEATURE_DIRECTORY_AS_PRIMARY_FOLDER Y #define? COMPANY_COMPLETE_FEATURE_INSTALL_ON_DEMAND N #if ['<$COMPANY_COMPLETE_FEATURE_INSTALL_ON_DEMAND>' = 'N'] #define? COMPANY_COMPLETE_FEATURE_ATTRIBUTES UIDisallowAbsent #elseif #define? COMPANY_COMPLETE_FEATURE_ATTRIBUTES UIDisallowAbsent FavorSource FavorAdvertise #endif #ifndef COMPANY_COMPLETE_FEATURE ;;Name of complete feature ;--- Event log messages may show this but LITTLE other detail (make meaningful!) --- #define? COMPANY_COMPLETE_FEATURE_TEMPLATE \ ALL.<$ProductVersion>.<$ProdInfo.ProductName> ;;Will truncate to max length (move valuable stuff to the left...) #DefineRexx '' nopack ;--- Build ID that would identify product in Event log ---------- @@T = '<$COMPANY_COMPLETE_FEATURE_TEMPLATE>'; ;--- Make sure it only contains valid chars for an ID ----------- <$Rexx2FixMsiId IDVAR="@@T"> ;--- Make sure not longer than "Feature" table can handle ------- if length(@@T) > <$TABLES_LNG_FEATURE_COLUMN> then @@T = left(@@T, <$TABLES_LNG_FEATURE_COLUMN>); ;--- Store it --------------------------------------------------- Call MacroSet 'COMPANY_COMPLETE_FEATURE', @@T #DefineRexx #endif ;--[4Doco-COMPANY_WANT_COMPLETE_FEATURE]--- #( <$Feature "<$COMPANY_COMPLETE_FEATURE>" Directory_="<$COMPANY_COMPLETE_FEATURE_DIRECTORY>" Title="<$COMPANY_COMPLETE_FEATURE_TITLE>" Description="<$COMPANY_COMPLETE_FEATURE_DESCRIPTION>" Attributes="<$COMPANY_COMPLETE_FEATURE_ATTRIBUTES>" Display="<$COMPANY_COMPLETE_FEATURE_DISPLAY>" > #) ;--- Do we know the "complete" directory (yet)? -------------------------- #if ['<$COMPANY_COMPLETE_FEATURE_DIRECTORY>' <> ''] ;--- We do but do we allow its use as install location? ------------- #if ['<$COMPANY_COMPLETE_FEATURE_DIRECTORY_AS_PRIMARY_FOLDER>' = 'Y'] <$PrimaryFolder Key="<$COMPANY_COMPLETE_FEATURE_DIRECTORY>"> #endif #endif #endif ;---------------------------------------------------------------------------- ;--- Create standard directories -------------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_DEFINE_STANDARD_DIRECTORIES Y #define? COMPANY_CREATE_STANDARD_DIRECTORIES_ON_DEMAND Y #if ['<$COMPANY_DEFINE_STANDARD_DIRECTORIES>' = 'Y'] ;--- Define a macro to create the definitions while allowing user to individually disable them --- #( ;--- A "private" macro only used below ------------------------------ #define @@StdDir ;--- Set a default value and check if definition allowed ------------ #define? COMPANY_DEFINE_STANDARD_DIRECTORY_{$Key} Y #if ['<$COMPANY_DEFINE_STANDARD_DIRECTORY_{$Key}>' = 'Y'] ;--- We are allowed to create it -------------------------------- <$Directory Key="{$Key}" Parent="{$Parent}" Dir="{$Dir}" AsIs="Y" Conditional=^<$COMPANY_CREATE_STANDARD_DIRECTORIES_ON_DEMAND>^> #endif #) ;--- User wants or is allowing these definitions ------------------------ <$@@StdDir Key="TARGETDIR" Parent="" Dir="SourceDir"> <$@@StdDir Key="LocalAppDataFolder" Parent="TARGETDIR" Dir=".:APPLIC~1|Application Data"> <$@@StdDir Key="CommonAppDataFolder" Parent="TARGETDIR" Dir=".:APPLIC~1|Application Data"> <$@@StdDir Key="ProgramFilesFolder" Parent="TARGETDIR" Dir=".:ProgFile|Program Files"> <$@@StdDir Key="ProgramFiles64Folder" Parent="TARGETDIR" Dir=".:Prog64|Program Files 64"> <$@@StdDir Key="WindowsFolder" Parent="TARGETDIR" Dir=".:Windows"> <$@@StdDir Key="CommonFilesFolder" Parent="ProgramFilesFolder" Dir=".:Common"> <$@@StdDir Key="CommonFiles64Folder" Parent="ProgramFilesFolder" Dir=".:Comm64|Common Files 64"> <$@@StdDir Key="StartupFolder" Parent="ProgramMenuFolder" Dir=".:Startup"> <$@@StdDir Key="AdminToolsFolder" Parent="WindowsFolder" Dir=".:ADMINT~1|Admin Tools"> <$@@StdDir Key="TemplateFolder" Parent="WindowsFolder" Dir=".:ShellNew"> <$@@StdDir Key="System16Folder" Parent="WindowsFolder" Dir=".:System"> <$@@StdDir Key="SystemFolder" Parent="WindowsFolder" Dir=".:System32"> <$@@StdDir Key="System64Folder" Parent="WindowsFolder" Dir=".:System64"> <$@@StdDir Key="TempFolder" Parent="WindowsFolder" Dir=".:Temp"> ;--- Profiles related folders ------------------------------------------- #define? COMPANY_DEFINE_PROFILE_RELATED_DIRECTORIES Y #if ['<$COMPANY_DEFINE_PROFILE_RELATED_DIRECTORIES>' = 'Y'] <$@@StdDir Key="ProfilesFolder" Parent="WindowsFolder" Dir=".:Profiles"> <$@@StdDir Key="StartMenuFolder" Parent="ProfilesFolder" Dir=".:StartMen|Start Menu"> <$@@StdDir Key="ProgramMenuFolder" Parent="StartMenuFolder" Dir=".:Programs"> <$@@StdDir Key="AppDataFolder" Parent="ProfilesFolder" Dir=".:Applicat|Application Data"> <$@@StdDir Key="DesktopFolder" Parent="ProfilesFolder" Dir=".:Desktop"> <$@@StdDir Key="FavoritesFolder" Parent="ProfilesFolder" Dir=".:Favorite|Favorites"> <$@@StdDir Key="NetHoodFolder" Parent="ProfilesFolder" Dir=".:NetHood"> <$@@StdDir Key="PersonalFolder" Parent="ProfilesFolder" Dir=".:Personal"> <$@@StdDir Key="PrintHoodFolder" Parent="ProfilesFolder" Dir=".:PrintHoo|PrintHood"> <$@@StdDir Key="RecentFolder" Parent="ProfilesFolder" Dir=".:Recent"> <$@@StdDir Key="SendToFolder" Parent="ProfilesFolder" Dir=".:SendTo"> #endif ;--- Other folders ------------------------------------------------------ #define? COMPANY_DEFINE_OTHER_DIRECTORIES Y #if ['<$COMPANY_DEFINE_OTHER_DIRECTORIES>' = 'Y'] <$@@StdDir Key="MyPicturesFolder" Parent="TARGETDIR" Dir=".:MYPICT~1|My Pictures"> <$@@StdDir Key="FontsFolder" Parent="WindowsFolder" Dir=".:Fonts"> #endif #endif ;[SetUpgradeGuid] ;---------------------------------------------------------------------------- ;--- Set MSI guids ---------------------------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_UPGRADE_CODE_QUALIFIER ;;Allow user scheme for having "sets" of upgrade codes #if ['<$COMPANY_UPGRADE_CODE_QUALIFIER>' = ''] ;--- Not part of a set (or at least using standard name) ---------------- #define @@UPGRADE_CODE_NAME UpgradeCode #elseif ;--- Upgrade code name qualified by name of a "set" --------------------- #option PUSH DefineMacroReplace=YES #define @@UPGRADE_CODE_NAME UpgradeCode.<$COMPANY_UPGRADE_CODE_QUALIFIER> #option POP ;--- Cludge so it can easily be referred to ----------------------------- #define VBSRET.GUID.UpgradeCode <$VBSRET.GUID.[@@UPGRADE_CODE_NAME]> #endif #define UpgradeCodeValue <$VBSRET.GUID.UpgradeCode> ;;Info returned from VBSCRIPT pass1 #define? COMPANY_UPGRADECODE_HOOK_AFTER_SETTING ;;Allow you to do something (perhaps validate value) #( '<?NewLine>' #define? COMPANY_SET_PROPERTY_UPGRADECODE dim UpgradeCode ;;Need a VBSCRIPT variable <$Guid '<$@@UPGRADE_CODE_NAME>' VB="UpgradeCode"> ;;Want same GUID every time! <$Property "UpgradeCode" *Value="UpgradeCode"> ;;Use GUID "calculated" above <$COMPANY_UPGRADECODE_HOOK_AFTER_SETTING> ;;Default is to do nothing (VBS variable "UpgradeCode" contains the value. #) #( '<?NewLine>' #define? COMPANY_SET_PROPERTY_PRODUCTCODE <$Property "ProductCode" *Value='GuidMake("ProductCode")'> ;;Random GUID #) #( '<?NewLine>' #define? COMPANY_SET_PROPERTY_PACKAGECODE <$Summary "PackageCode" *Value='GuidMake("PackageCode")'> ;;Random GUID #) <$COMPANY_SET_PROPERTY_UPGRADECODE> ;;User can override above macros to change behaviour... <$COMPANY_SET_PROPERTY_PRODUCTCODE> <$COMPANY_SET_PROPERTY_PACKAGECODE> ;[SetUpgradeGuid] ;---------------------------------------------------------------------------- ;--- By default make PER MACHINE -------------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_ALLUSERS_CREATE_PROPERTY Y ;;Y/N #if ['<$COMPANY_ALLUSERS_CREATE_PROPERTY>' <> 'N'] #define? COMPANY_ALLUSERS_PROPERTY 1 ;;1=Per Machine <$Property "ALLUSERS" Value="<$COMPANY_ALLUSERS_PROPERTY>"> #endif ;[4Doco-COMPANY_REINSTALLMODE] ;---------------------------------------------------------------------------- ;--- Default to overwriting (file from package ALWAYS correct) -------------- ;---------------------------------------------------------------------------- #define? COMPANY_REINSTALLMODE amus ;;Normal MSI default is "omus" #if ['<$COMPANY_REINSTALLMODE>' <> ''] ;--- User wants or allows this change (value wasn't blanked) ------------- <$Property "REINSTALLMODE" Value=^<$COMPANY_REINSTALLMODE>^> #endif ;[4Doco-COMPANY_REINSTALLMODE] ;---------------------------------------------------------------------------- ;--- Set Product name (allow overriding of default) ------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_PRODUCT_NAME_PREFIX.P ;;None for production #define? COMPANY_PRODUCT_NAME_PREFIX.D ;;!!! etc = Developer friendy - sorts up front in ARP #define? COMPANY_PRODUCT_NAME_PREFIX <$COMPANY_PRODUCT_NAME_PREFIX.[MMMODE]> #define? COMPANY_PROPERTY_PRODUCTNAME <$COMPANY_PRODUCT_NAME_PREFIX><$ProdInfo.ProductName> <$Property "ProductName" Value="<$COMPANY_PROPERTY_PRODUCTNAME>"> ;---------------------------------------------------------------------------- ;--- Basic MSI summary items ------------------------------------------------ ;---------------------------------------------------------------------------- #define? COMPANY_SUMMARY_TITLE <$COMPANY_PRODUCT_NAME_PREFIX><$ProdInfo.ProductName> ;#if ['<$COMPANY_PROPERTY_BuildTime $$IsBlank>' = 'Y'] #define? COMPANY_SUMMARY_SUBJECT <$ProductVersion> (created <?CompileTime>) ;#elseif ; #define? COMPANY_SUMMARY_SUBJECT <$ProductVersion> (created [<$COMPANY_PROPERTY_BuildTime>]) ;#endif #define? COMPANY_PACKAGE_REQUIRES_ELEVATED_PRIVLEDGES Y #if ['<$COMPANY_PACKAGE_REQUIRES_ELEVATED_PRIVLEDGES $$UPPER>' <> 'N'] ;--- Elevated privledges are (or may be) required ----------------------- #define? COMPANY_SUMMARY_SourceType msidbSumInfoSourceTypeCompressed #elseif ;--- Elevated privledges are not required ------------------------------- #define? COMPANY_SUMMARY_SourceType msidbSumInfoSourceTypeCompressed or msidbSumInfoSourceTypeLUAPackage #endif ;---[4Doco-COMPANY_SUMMARY_TEMPLATE]--- #define? COMPANY_SUMMARY_TEMPLATE Intel;1033 ;;Processor & Language Information <$Summary "TEMPLATE" Value="<$COMPANY_SUMMARY_TEMPLATE>"> ;---[4Doco-COMPANY_SUMMARY_TEMPLATE]--- ;---[4Doco-COMPANY_SUMMARY_SCHEMA]--- #define? COMPANY_SUMMARY_SCHEMA 110 ;;Minimum of Windows Installer v1.1 is required for this msi (a type of launch condition) <$Summary "MsiSchema" Value="<$COMPANY_SUMMARY_SCHEMA>"> ;---[4Doco-COMPANY_SUMMARY_SCHEMA]--- <$Summary "TITLE" VALUE="<$COMPANY_SUMMARY_TITLE>"> <$Summary "Subject" VALUE="<$COMPANY_SUMMARY_SUBJECT>"> <$Summary "SourceType" Value="<$COMPANY_SUMMARY_SourceType>"> <$Summary "CREATE_DTM" VALUE="now()"> <$Summary "EDITTIME" VALUE="now()"> <$Summary "LASTSAVE_DTM" *VALUE="Empty"> ;;Don't want <$Summary "LASTPRINTED" *VALUE=^Empty^> ;;Don't want #define? COMPANY_SET_SUMMARY_COMMENTS Y #if ['<$COMPANY_SET_SUMMARY_COMMENTS $$UPPER>' = 'Y'] #define? COMPANY_SUMMARY_COMMENTS <$ProdInfo.Description> <$Html2Text VBVAR="VB_COMMENTS" HTML=^<$COMPANY_SUMMARY_COMMENTS>^> <$Summary "COMMENTS" *VALUE="VB_COMMENTS"> #endif ;---------------------------------------------------------------------------- ;--- Set AUTHOR related (allow overriding of default) ----------------------- ;---------------------------------------------------------------------------- #define? COMPANY_PROPERTY_MANUFACTURER <$DEPT_MSI_MANUFACTURER> #define? COMPANY_SUMMARY_AUTHOR <$DEPT_MSI_AUTHOR> - using MAKEMSI #define? COMPANY_SUMMARY_LASTAUTHOR <$DEPT_MSI_AUTHOR> <$Property "Manufacturer" Value="<$COMPANY_PROPERTY_MANUFACTURER>"> <$Summary "AUTHOR" VALUE="<$COMPANY_SUMMARY_AUTHOR>"> <$Summary "LastAuthor" VALUE="<$COMPANY_SUMMARY_LASTAUTHOR>"> ;---------------------------------------------------------------------------- ;--- Set CONTACT details (allow overriding of default) ---------------------- ;---------------------------------------------------------------------------- #define? COMPANY_CONTACT_NAME #define? COMPANY_CONTACT_NAME_PHONE #if ['<$COMPANY_CONTACT_NAME $$IsBlank>' = 'N'] <$Property "ARPCONTACT" VALUE=^<$COMPANY_CONTACT_NAME>^> #if ['<$COMPANY_CONTACT_NAME_PHONE $$IsBlank>' = 'N'] <$Property "ARPHELPTELEPHONE" VALUE=^<$COMPANY_CONTACT_NAME_PHONE>^> #endif #endif ;---------------------------------------------------------------------------- ;--- Web Links in Add/Remove programs --------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_ARP_URL_PUBLISHER <$DEPT_ARP_URL_PUBLISHER> #define? COMPANY_ARP_URL_TECHNICAL_SUPPORT <$DEPT_ARP_URL_TECHNICAL_SUPPORT> #define? COMPANY_ARP_URL_APPLICATION_UPDATE_INFORMATION <$DEPT_ARP_URL_APPLICATION_UPDATE_INFORMATION> #if ['<$COMPANY_ARP_URL_PUBLISHER>' <> ''] ;--- "Publisher" becomes hypertext link in WINXP ARP -------------------- <$Property "ARPURLINFOABOUT" Value="<$COMPANY_ARP_URL_PUBLISHER>"> #endif #if ['<$COMPANY_ARP_URL_TECHNICAL_SUPPORT>' <> ''] ;--- "Support Information" in WINXP ARP --------------------------------- <$Property "ARPHELPLINK" Value="<$COMPANY_ARP_URL_TECHNICAL_SUPPORT>"> #endif #if ['<$COMPANY_ARP_URL_APPLICATION_UPDATE_INFORMATION>' <> ''] ;--- "Product Updates:" in WINXP ARP ------------------------------------ <$Property "ARPURLUPDATEINFO" Value="<$COMPANY_ARP_URL_APPLICATION_UPDATE_INFORMATION>"> #endif ;---------------------------------------------------------------------------- ;--- Set properties --------------------------------------------------------- ;---------------------------------------------------------------------------- <$Property "ProductVersion" Value="<$ProductVersion>"> #define? COMPANY_SET_ARPCOMMENTS Y #if ['<$COMPANY_SET_ARPCOMMENTS $$UPPER>' = 'Y'] #define? COMPANY_PROPERTY_ARPCOMMENTS <$COMPANY_SUMMARY_COMMENTS> <$Html2Text VBVAR="VB_ARPCOMMENTS" HTML=^<$COMPANY_PROPERTY_ARPCOMMENTS>^> ;--- WinXP doesn't do good job of wrapping comments... ------------------ #define? COMPANY_ARPCOMMENTS_WRAP_AT_DOT Y #if ['<$COMPANY_ARPCOMMENTS_WRAP_AT_DOT $$UPPER>' = 'Y'] ;--- Assume dot is end of sentance, therefore good place to wrap ---- VB_ARPCOMMENTS = replace(VB_ARPCOMMENTS, ". ", "." & vbCRLF) ;;Avoid dots in version numbers etc! VB_ARPCOMMENTS = replace(VB_ARPCOMMENTS, vbCRLF & vbCRLF & vbCRLF, vbCRLF & vbCRLF) ;;If aleady had "para", above line made too big... #endif ;--- Set the property --------------------------------------------------- <$Property "ARPCOMMENTS" *VALUE="VB_ARPCOMMENTS"> #endif ;---------------------------------------------------------------------------- ;--- Upgrade (REPLACE) and MSI we have upgrade codes for! ------------------- ;---------------------------------------------------------------------------- ;[UseUpgradeCode] #define? COMPANY_AUTO_UNINSTALL_VIA_UPGRADE_TABLE Y #if ['<$COMPANY_AUTO_UNINSTALL_VIA_UPGRADE_TABLE>' = 'Y'] ;--- Look for older/newer versions of the same package (group) ----------- #define UpgradeCode_PROPERTY UC_OURSELVES ;;Use this property in "Upgrade" table entry <$MajorUpgrade "=UpgradeCode" Comment=^We upgrade any version of this product!^> ;;Use value in VB variable ;--- Any EXTRA upgrade codes to be handled? ------------------------------ #if ['<$ProdInfo.UpgradeCodes>' <> ''] <$MajorUpgrade "<$ProdInfo.UpgradeCodes>" comment="Defined by .ver file (KeyWord: UpgradeCodes)"> #endif ;--- Install MSI AFTER complete uninstallation of older ------------------ #define? COMPANY_RemoveExistingProducts_HOOK_BEFORE_MOVING #define? COMPANY_RemoveExistingProducts_HOOK_AFTER_MOVING #define? COMPANY_RemoveExistingProducts_SEQ InstallValidate-InstallInitialize #( ;--- Allow easy overiding/removal of this step ---------------------- #define? COMPANY_MOVE_RemoveExistingProducts <$Table "InstallExecuteSequence"> ;--- Move to desired location ----------------------------------- dim RepSeq : RepSeq = GetSeqNumber("InstallExecuteSequence", "<$COMPANY_RemoveExistingProducts_SEQ>", 1) <$Row Action="RemoveExistingProducts" *Sequence="RepSeq"> <$/Table> #) <$COMPANY_RemoveExistingProducts_HOOK_BEFORE_MOVING> <$COMPANY_MOVE_RemoveExistingProducts> <$COMPANY_RemoveExistingProducts_HOOK_AFTER_MOVING> #endif ;[UseUpgradeCode] ;---------------------------------------------------------------------------- ;--- Set up end of package -------------------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_ONEXIT_HOOK_BEFORE_ZIPPING #define? COMPANY_ONEXIT_HOOK_AFTER_ZIPPING #define? COMPANY_ONEXIT_HOOK_STILL_IN_COMPLETE_FEATURE #define? COMPANY_VBSCRIPT_FUNCTIONS #define? COMPANY_VALIDATE_NESTING Y #if ['<$COMPANY_VALIDATE_NESTING>' = 'N'] ;--- Turned off (Don't turn off unless theer is a reason AND if there is let me know!) --- #define? @@COMPANY_VALIDATE_NESTING ;;No nothing #elseif ;--- User want or is allowing the validation (hopefully won't cause problems) --- #define? @@COMPANY_VALIDATE_NESTING \ #evaluate ^^ ^call ValidateNesting^ #endif #( '' #define COMPANY_ONEXIT ;--- Zip source code if wanted ------------------------------------------- <$COMPANY_ONEXIT_HOOK_BEFORE_ZIPPING> <$CommonFramework-ZipSourceCode> <$COMPANY_ONEXIT_HOOK_AFTER_ZIPPING> ;--- A HOOK -------------------------------------------------------------- <$COMPANY_ONEXIT_HOOK_STILL_IN_COMPLETE_FEATURE> ;---------------------------------------------------------------------------- ;--- Include "UISAMPLE" related changes ------------------------------------- ;---------------------------------------------------------------------------- #NextId PUSH #include "UiSample.MMH" #NextId POP ;--- Add generated DOCO to the MSI --------------------------------------- <$@@COMPANY_ADD_GENERATED_DOCO> ;--- Now finished with the "COMPLETE" feature ---------------------------- #if ['<$COMPANY_WANT_COMPLETE_FEATURE>' = 'Y'] ;--- User did not disable complete feature --------------------------- <$/Feature> #endif ;--- End the package ----------------------------------------------------- <$/Msi> ;--- Include any user defined VBSCRIPT functions ------------------------- <$COMPANY_VBSCRIPT_FUNCTIONS> ;--- PPWIZARD "05.203" onwards can validate nesting at any time ---------- <$@@COMPANY_VALIDATE_NESTING> #) #OnExit #69 <$COMPANY_ONEXIT> ;---[4Doco-COMPANY_ADD_GENERATED_DOCO]--- ;---------------------------------------------------------------------------- ;--- We wish to add the generated documentation to the MSI ------------------ ;---------------------------------------------------------------------------- #if ['<$ONEXIT_GENERATE_HTML>' = 'N'] ;--- We didn't create any documentation (so nothing to add!) ------------ #define? @@COMPANY_ADD_GENERATED_DOCO #define+ MSI_COMPLETE_AT_END_OF_PASS 1 ;;No need for 2nd pass if not adding the doco! #elseif ;--- We did generate the documentation ---------------------------------- #define? COMPANY_WANT_TO_INSTALL_DOCUMENTATION Y #if ['<$COMPANY_WANT_TO_INSTALL_DOCUMENTATION>' = 'N'] ;--- We have been told not to add the documenation to the MSI ------- #define+ MSI_COMPLETE_AT_END_OF_PASS 1 ;;No need for 2nd pass if not adding the doco! #define? @@COMPANY_ADD_GENERATED_DOCO #elseif ;--- User wants us the add the documentation to the MSI ------------- #define? COMPANY_DOCO_BASE_DIR c:\Program Files\ #define? COMPANY_DOCO_ADD2_BASE_DIR MAKEMSI Package Documentation\ #define? COMPANY_DOCO_RELATIVE_DIR <$COMPANY_NAME>\<$DEPT_NAME> #define? COMPANY_HTMLRPT_DOCO_INSTALL_DIR <$COMPANY_DOCO_BASE_DIR><$COMPANY_DOCO_ADD2_BASE_DIR><$COMPANY_DOCO_RELATIVE_DIR> #define? COMPANY_HTMLRPT_DOCO_COMPONENTS_GUID * ;;Ramdom one is fine... #ifndef COMPANY_HTMLRPT_DOCO_INSTALL_DIR_KEY ;--- User didn't tell us what key to use ------------------- #define COMPANY_HTMLRPT_DOCO_INSTALL_DIR_KEY MAKEMSI_DOCO #define @@CreateDocoKey #endif #define? COMPANY_HTMLRPT_NAME_LONG <$MSI_HTMLNAME $$FilePart:NAME> ;;Alternative = "<$ProdInfo.ProductName>(<$ProductVersion>).hta" #define? COMPANY_HTMLRPT_NAME_8.3 MSIRPT.HTA #ifndef COMPANY_COMPLETE_FEATURE ;--- Don't have a complete feature ------------------------------ #define? COMPANY_HTMLRPT_FEATURE ;;User will have to tell us! #elseif ;--- We know where we can add it! ------------------------------- #define? COMPANY_HTMLRPT_FEATURE <$COMPANY_COMPLETE_FEATURE> #endif #if ['<$COMPANY_HTMLRPT_FEATURE>' = ''] #error ^To add the HTML to the MSI we need to know the name of a feature, as{NL}you have turned off the "complete" feature you must supply this name in{NL}the "COMPANY_HTMLRPT_FEATURE" macro!^ #endif #( #define? @@COMPANY_ADD_GENERATED_DOCO <$HookInto "MAKEMSI_HOOK_SECOND_PASS_PROCESSING" After="@@AddDocumentationToTheMsi"> #) #( #define @@AddDocumentationToTheMsi ;--- Add later in case directory not yet known ------------------- #ifdef @@CreateDocoKey <$DirectoryTree Key="<$COMPANY_HTMLRPT_DOCO_INSTALL_DIR_KEY>" Dir="<$COMPANY_HTMLRPT_DOCO_INSTALL_DIR>"> #endif ;--- Define the file row ---------------------------------------- <$Component "<$FILE_HTMLRPT_ROWKEY>" Create="Y" Directory_="<$COMPANY_HTMLRPT_DOCO_INSTALL_DIR_KEY>" Feature=^<$COMPANY_HTMLRPT_FEATURE>^ ComponentId=^<$COMPANY_HTMLRPT_DOCO_COMPONENTS_GUID>^ CU="?"> ;--- Add the generated doco ---------------------------------- <$Cabinet "[Pass2Doco]" Cache="N"> #( ;--- Note that the doco has not yet actually been generated! --- <$File RowKey="<$FILE_HTMLRPT_ROWKEY>" ;;Marks as special case Source="<$MSI_HTMLNAME>" Destination="<$COMPANY_HTMLRPT_NAME_LONG>" 8.3="<$COMPANY_HTMLRPT_NAME_8.3>" ;;Must supply one! - May change VBS to fix up... HASH="N" Language="<$DEFAULT_FILE_LANG_WHEN_GETLANGUAGE_FAILS>" Version="" DOCO="N" ;;too late for that! > #) <$/Cabinet> <$/Component> #ifndef COMPANY_DONT_UPDATE_ARPREADME ;--- Update "Support Information" (readme) info -------------- <$PropertyCa "ARPREADME" VALUE=^file:///[!<$FILE_HTMLRPT_ROWKEY>]^ Seq="CostFinalize-"> #endif #) #endif #endif ;---[4Doco-COMPANY_ADD_GENERATED_DOCO]--- ;---------------------------------------------------------------------------- ;--- Set the Product ICON --------------------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_PRODUCT_ICON MmDefaultProductIcon.ico ;;Add-Remove or WI bug causes first icon in Icon table to be picked up if none set! #if ['<$COMPANY_PRODUCT_ICON>' <> ''] <$Icon '<$COMPANY_PRODUCT_ICON>' Product="Y"> #endif ;---------------------------------------------------------------------------- ;--- Make sure we record details about this header -------------------------- ;---------------------------------------------------------------------------- <$SourceFile Version="<$COMPANY_VERSION>"> ;---------------------------------------------------------------------------- ;--- Record some details in standard properties ----------------------------- ;---------------------------------------------------------------------------- #( '' #define? CompanyAddStampWithProperty ;--- Define the default name for this property -------------------------- #define? COMPANY_PROPERTY_{$#1} <$MAKEMSI_PROPERTY_PREFIX>{$#1} ;--- If the property name is empty user doesn't want to create it ------- #if ['<$COMPANY_PROPERTY_{$#1} $$IsBlank>' = 'N'] ;--- User didn't disable, so stamp with value ----------------------- <$Property "<$COMPANY_PROPERTY_{$#1}>" VALUE=^{$Value}^> #endif #) #define? COMPANY_ADD_STAMP_PROPERTIES Y #if ['<$COMPANY_ADD_STAMP_PROPERTIES>' <> 'N'] ;--- User wants at least one of the following.... ----------------------- <$CompanyAddStampWithProperty "MakemsiVersion" VALUE=^<$MAKEMSI_VERSION>^> <$CompanyAddStampWithProperty "BuildComputer" VALUE=^<$MAKEMSI_COMPUTERNAME>^> <$CompanyAddStampWithProperty "BuildUser" VALUE=^<$MAKEMSI_USERNAME> in <$MAKEMSI_USERDOMAIN>^> <$CompanyAddStampWithProperty "BuildTime" VALUE=^<?CompileTime>^> <$CompanyAddStampWithProperty "ProcessingMode" VALUE=^<$MMMODE_DESCRIPTION>^> <$CompanyAddStampWithProperty "SupportedPlatforms" VALUE=^<$PLATFORM_MsiSupportedWhere>^> #endif ;------------------------------------------------------------------------------------------- ;--- "UserRegistrationDlg" is not optional (makes dialog inserts/deletes too complicated --- ;------------------------------------------------------------------------------------------- <$Table "Property"> <$RowsDelete WHERE="Property = 'ShowUserRegistrationDlg'"> <$/Table> <$Table "ControlEvent"> <$RowsDelete WHERE=^Dialog_ = 'LicenseAgreementDlg' AND Control_ = 'Next' AND Event = 'NewDialog' AND Argument = 'SetupTypeDlg' AND Condition = 'IAgree = "Yes" AND ShowUserRegistrationDlg <> 1'^> <$RowsDelete WHERE=^Dialog_ = 'LicenseAgreementDlg' AND Control_ = 'Next' AND Event = 'NewDialog' AND Argument = 'UserRegistrationDlg' AND Condition = 'IAgree = "Yes" AND ShowUserRegistrationDlg = 1'^> <$RowsDelete WHERE="Dialog_ = 'SetupTypeDlg' AND Control_ = 'Back' AND Event = 'NewDialog' AND Argument = 'LicenseAgreementDlg' AND Condition = 'ShowUserRegistrationDlg <> 1'"> <$RowsDelete WHERE="Dialog_ = 'SetupTypeDlg' AND Control_ = 'Back' AND Event = 'NewDialog' AND Argument = 'UserRegistrationDlg' AND Condition = 'ShowUserRegistrationDlg = 1'"> #( <$Row Dialog_="LicenseAgreementDlg" Control_="Next" Event="NewDialog" Argument="UserRegistrationDlg" Condition='IAgree = "Yes"' Ordering="1" > #) #( <$Row Dialog_="SetupTypeDlg" Control_="Back" Event="NewDialog" Argument="UserRegistrationDlg" Condition="1" Ordering="" > #) <$/Table> ;---------------------------------------------------------------------------- ;--- Fix up the Licence agreement ------------------------------------------- ;---------------------------------------------------------------------------- #if ['<$COMPANY_LOOK_FOR_LICENCE_FILE>' <> 'N'] ;--- Look for a licence file -------------------------------------------- #DefineRexx '' ;--- Look for a ".licence" file -------------------------------------- @@LicenceFile = '<$COMPANY_LICENCE_NAME>'; call Info 'Have licence?: ' || FilePart('n', @@LicenceFile); @@LicenceFileFull = FileQueryExists(@@LicenceFile); if @@LicenceFileFull <> '' then do ;--- We found a ".licence" file ---------------------------------- @@FromVerLF = MacroGet('ProdInfo.Licence') if @@FromVerLF <> '' then do ;--- We found a file and one was specified in the .ver file (ignore if same) --- @@FromVerLFFull = FileQueryExists(@@FromVerLF); if translate(@@FromVerLFFull) <> translate(@@LicenceFileFull) then call Warning "LIC00", "Local Licence file is overriding the one specified in the version file!" else call Info 'The licence file specified in the .VER file is the default'; end ;--- Set "ProdInfo.Licence" -------------------------------------- call MacroSet 'ProdInfo.Licence', @@LicenceFileFull, 'Y'; end; #DefineRexx #endif #DefineRexx '' ;--- Display the licence we will use (if any) ---------------------------- if MacroGet('ProdInfo.Licence') = '' then @@Using = "NONE" else @@Using = MacroGet('ProdInfo.Licence'); call Info 'Using licence: ' || @@Using; #DefineRexx #if ['<$ProdInfo.Licence $$IsBlank>' = 'N'] ;--- We have a licence (in a file) --------------------------------------- #if ['<$COMPANY_PREPROCESS_LICENCE_FILE>' <> 'N'] ;--- Licence file contains macros or other formatting --------------- #option PUSH DefineMacroReplace=ON #define COMPANY_LICENCE_TEMPLATE <$ProdInfo.Licence> #define+ ProdInfo.Licence <$MAKEMSI_OUT_LOG_DIR $$DEL:\>PreProcessed.rtf #option POP <$FileMake "<$ProdInfo.Licence>"> #include "<$COMPANY_LICENCE_TEMPLATE>" <$/FileMake> #endif #DefineRexx '' ;--- Make sure the licence file exists ------------------------------- @@Licence = MacroGet('ProdInfo.Licence'); @@LicenceFile = FindFile(@@Licence) if @@LicenceFile = '' then Error('We could not find the licence file "' || @@Licence || '"'); ;--- Read the information -------------------------------------------- call FileClose @@LicenceFile, 'N'; @@Text = charin(@@LicenceFile,1, 999999); call FileClose @@LicenceFile; ;--- Create a VB string (without the outer quotes) ------------------- @@Text = ReplaceString(@@Text, '"', '""'); @@Text = ReplaceString(@@Text, '00'x, ' '); ;;God knows why the trailing null exists... @@Text = ReplaceString(@@Text, '0D'x, '" & vbCR & "'); @@Text = ReplaceString(@@Text, '0A'x, '" & vbLF & "'); #DefineRexx <$Table "Control"> #( <$Row @Where="Dialog_='LicenseAgreementDlg' and Control='AgreementText'" @OK="? = 1" *Text=~"<??@@Text>"~ > #) <$/Table> #endif ;---------------------------------------------------------------------------- ;--- Want user registration dialog? ----------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_WANT_USER_REGISTRATION_DIALOG N #if ['<$COMPANY_WANT_USER_REGISTRATION_DIALOG>' = 'N'] #define REMOVED_UserRegistrationDlg <$DialogRemove "UserRegistrationDlg"> #endif ;---------------------------------------------------------------------------- ;--- Want the licence Dialog? ----------------------------------------------- ;---------------------------------------------------------------------------- #if ['<$ProdInfo.Licence $$IsBlank>' = 'Y'] #define REMOVED_LicenseAgreementDlg <$DialogRemove "LicenseAgreementDlg"> #endif ;---------------------------------------------------------------------------- ;--- Some Validation Message Filtering -------------------------------------- ;---------------------------------------------------------------------------- #define? COMPANY_MsiValFilter_CustomAction.ExtendedType \ <$MsiValFilter "Column: ExtendedType of Table: CustomAction is not defined in database" Comment="This column is optional"> <$COMPANY_MsiValFilter_CustomAction.ExtendedType> #NextId UNLOCK "COMPANY.MMH"