Archive for the ‘Wise Package Studio Training’ Category

What are MergeModules

September 5, 2011 Leave a comment

Merge modules provide a standard method by which developers deliver shared Microsoft® Windows® Installer components and setup logic to their applications. Merge modules are used to deliver shared code, files, resources, Registry entries, and setup logic to applications as a single compound file. Developers authoring new merge modules, or using existing merge modules, should follow the standard outlined in this section.

A merge module is similar in structure to a simplified Windows Installer .msi file. However, a merge module cannot be installed alone, it must be merged into an installation package using a merge tool. Developers wanting to use merge modules must obtain one of the freely distributed merge tools, such as Mergemod.dll, or purchase a merge tool from an independent software vendor. Developers can create new merge modules by using many of the same software tools used to create a Windows Installer installation package, such as the database table editor Orca provided with the Windows Installer SDK.

When a merge module is merged into the .msi file of an application, all the information and resources required to install the components delivered by the merge module are incorporated into the application’s .msi file. The merge module is then no longer required to install these components and the merge module does not need to be accessible to a user. Because all the information needed to install the components is delivered as a single file, the use of merge modules can eliminate many instances of version conflicts, missing Registry entries, and improperly installed files.

Hide ARP entry of an MSI

August 30, 2011 Leave a comment

VBScript to hide ARP entry of an MSI. In place of [ProductCode] give the product code of the msi for which you want to hide the ARP entry.

Dim WSHShell,strRegKey 
Set WSHShell = WScript.CreateObject("WScript.Shell") 
WSHShell.Regwrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[ProductCode]\SystemComponent","1","REG_DWORD"

SendKeys using VBScript

August 30, 2011 Leave a comment

Following script is an example of how to use SendKeys function available in VBScript to pass automated clicks to an application.

Application Window Name should be changed in the script according to application that you are working on.

On Error Resume Next

Set WshShell = CreateObject("WScript.Shell")
strWindowNameEN = "Application Window Name"

successEN = False

successEN = WshShell.AppActivate(strWindowNameEN)
Loop Until (successEN = True)

If (successEN) Then
WshShell.AppActivate strWindowNameEN
End IF

WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{ENTER}"

Add entries to Hosts File

August 30, 2011 Leave a comment

Following script can be used to append entries in HOSTS file. A text file containing the entry to be appended should be placed in INPUT location as in below script


Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim TargetFile,objWshShell,objFSO, Input, ProgramFiles, WinDir
Dim objTextFile, Target
Set objWshShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
ProgramFiles = ObjWshShell.ExpandEnvironmentStrings("%ProgramFiles%")
WinDir = ObjWshShell.ExpandEnvironmentStrings("%WinDir%")
Set Targetfile = objFSO.GetFile(WinDir & "\system32\drivers\etc\hosts")
Set Input = objFSO.GetFile(ProgramFiles & "\Input.txt")

Set objTextFile = objFSO.OpenTextFile (Input, ForReading)
Set Target = CreateObject("Scripting.FileSystemObject")
Set TargetFile = Target.OpenTextFile (TargetFile, ForAppending, True)
Do Until objTextFile.AtEndOfStream
Input = objTextFile.ReadLine
objFSO.DeleteFile(ProgramFiles & "\Input.txt")

How to Package Drive Applications using DPInst.exe

August 30, 2011 Leave a comment

DPInst supports the following command-line switches that set the DPInst configuration flags that are described in Setting DPInst Configuration Flags and additional switches that further modify DPInst operation:


Sets the installAllOrNone flag to ON, which configures DPInst to install drivers in a driver package only if all of the drivers in the installation package can be installed.

Configures DPInst, if DPInst is called at a command prompt, to display the text of log messages in the Command Prompt window.

Sets the deleteBinaries flag to ON, which configures DPInst to delete the binary files that were copied to a system when a driver package was installed.

Note   Starting with Windows 7, the /d switch is ignored by the operating system. Binary files, which were copied to a system when a driver package was installed, can no longer be deleted by using DPInst.

Sets the enableNotListedLanguages flag to ON, which configures DPInst to enable all of the supported languages that are not explicitly enabled by language XML elements in a DPInst descriptor file.

Sets the forceIfDriverIsNotBetter flag to ON, which configures DPInst to install a driver on a device even if the driver that is currently installed on the device is a better match than the new driver.

/h/?, or /help
Configures DPInst to display help information about DPInst command-line options. If DPInst was called at a command prompt, DPInst displays the help text in the Command Prompt window; otherwise, DPInst displays the help text in a message box.

/l language-ID
Configures DPInst to display the text, bitmaps, and icon for the language that is specified by a language-ID value. The language-ID value can be specified in either hexadecimal or decimal format. For a list of the languages and corresponding language identifiers, see DPInst Localization Support.

If DPInst supports the specified language and runs on a Windows operating system in which the language is installed, DPInst will use the specified language. For more information about how to use the /L switch, see Testing Language Customization.

Sets the legacyMode flag to ON. In legacy mode, DPInst accepts unsigned driver packages without performing signature verification. However, be aware that Windows driver signing requirements apply to the installation of a driver package from the DIFx driver store. These requirements depend on the Windows version, the signature type, the driver package type, and the driver signing options that are set for a computer.

/q or /s
Sets the quietInstall flag to ON, which suppresses the display of wizard pages, user dialog boxes, and other user messages that DPInst and Windows generate. ThequietInstall flag works with the presence of an end-user license agreement (EULA) page and the suppressEulaPage flag.

Sets the promptIfDriverIsNotBetter flag to ON, which configures DPInst to display a user dialog box if a new driver is not a better match to a device than a driver that is currently installed on the device. The user dialog box informs a user of this situation and provides an option to replace the driver that is currently installed on the device with the new driver.

/path DPInst-working-directory
Sets the DPInst working directory to DPInst-working-directory. DPInst searches for driver packages in the DPInst working directory and in subdirectories under the working directory that are specified by subDirectory XML elements in a DPInst descriptor file. For more information about how to set the DPInst working directory and specifying subdirectories under the working directory, see Specifying the Location of a Driver Package.

Sets the suppressAddRemovePrograms flag to ON, which configures DPInst to suppress the addition of entries to Programs and Features in Control Panel. These entries represent the driver packages and driver package groups that DPInst installs.

Note  In versions of Windows earlier than Windows Vista, DPInst added the entry for the driver package or driver package group to Add or Remove Programs in Control Panel.

Sets the suppressEulaPage flag to ON, which configures DPinst to suppress the display of a EULA page. The suppressEulaPage flag works with the quietInstall flag and the suppressWizard flag.

Sets the scanHardware flag to ON, which configures DPInst to install a driver package for a Plug and Play (PnP) function driver only if the driver package matches a device that is currently configured in a computer and if the driver package is a better match for the device than the driver package that is currently installed on the device.

Sets the suppressWizard flag to ON, which suppresses the display of wizard pages and other user messages that DPInst generates. The suppressWizard flag works with the presence of a EULA page and the suppressEulaPage flag.

/u inf-file-path
Configures DPInst to uninstall a driver package whose INF file is specified by inf-file-path. The path that is specified by inf-file-path is relative to the directory that containsDPInst.exe.


The following command includes the /q and /se command-line switches, which configure DPInst to operate in quiet-install mode, whether a eula XML element is included in a DPInst descriptor file. This command suppresses all of the wizard pages, user dialog boxes, and other user messages that DPInst and Windows generate.

dpinst.exe /q /se

The following command includes the /q command-line switch, which configure DPInst to operate in quiet-install mode. However, DPInst will operate in quiet-install mode only if aeula XML element is not included in a DPInst descriptor file. If a eula element is included, DPInst does not operate in quiet-install mode.

dpinst.exe /q

The following command includes a /se command-line switch, which suppresses the display of only the EULA page.

dpinst.exe /se

The following command includes the /q and /se command-line switches, which configure DPInst to operate in quiet-install mode, including suppressing the EULA page. The command also includes the /f command-line switch, which forces the installation of a new driver package for a device that is configured in a computer, even if the driver package that is currently installed on the device is a better match for the device than the new driver package.

dpinst.exe /q /se /f

The following command includes the /sh command-line switch, which configures DPInst to install a driver package on a device that is configured in a computer only if the new driver package is a better match for the device than the driver package that is currently installed on the device. This command facilitates using an installation package to batchinstall driver packages for devices that are configured in a computer. Although the installation package might contain a large number of driver packages, DPInst will install only driver packages that are better matches for the devices than the driver packages that are currently installed on the devices.

dpinst.exe /sh

The following command includes the /u command-line switch, followed by the Abc.inf INF file, and the /d command-line switch. The /u command-line switch uninstalls the driver package that is associated with the Abc.inf INF file from all of the devices on which the package is installed. The /d command-line switch deletes the binaries that were copied to the system when the package was installed and deletes the package from the DIFx driver store. If the driver package is signed, the corresponding catalog file must be present in the same directory in which Abc.inf is located.

dpinst.exe /u abc.inf /d


Difference between Execute Immediate and Execute Deferred

August 30, 2011 Leave a comment


Immediate Execution
You use this option if the custom action should be executed during Windows Installer’s first pass through the installation database, which executes before any scripts. Custom actions run in Immediate Execution mode can change properties, feature states, component states, target directories, or schedule system operations. They can also be placed in the UI Sequence or in the Execute Sequence. If your custom action requires install files or registry keys, then it should be executed after the InstallFinalize sequence.

Deferred Execution
You use this option if the custom action should be executed later, during the install script installation. This is the best option if your custom action depends on a file that is installed with the installation and if the custom action changes the system directly. Deferred custom actions cannot change properties in the Property table, call another system service, or change the system directly. A custom action using Deferred Execution can only be placed in the Execute Sequence after the InstallInitialize sequence and before the InstallFinalize sequence. When using a custom action set to Deferred Execution, the session handle and the property data set during the installation sequence are not available

ICE Errors Reference

August 29, 2011 Leave a comment

The following list provides links to each individual ICE. These ICEs are used to validate installation packages.


ICE Brief description of ICE
ICE01: Simple test of ICE mechanism.
ICE02: Circular reference test for File-Component, Registry-Component KeyPaths.
ICE03: Basic data and foreign key validation.
ICE04 Validates file sequence numbers against the Media table’s LastSequence numbers.
ICE05 Validates for “required” entries in particular tables.
ICE06 Validates for missing column or tables in the database. Any column defined in the _Validation table must be found in the database.
ICE07 Validates that fonts are installed to the FontsFolder
ICE08 Checks for duplicate GUIDs in the ComponentId column of the Component table.
ICE09 Validates that the permanent bit is set for every component marked for installation into the SystemFolder.
ICE10 Ensures that advertise feature states among children and parents are compatible.
ICE11 ICE11 validates the Source column of the Custom Action table for Nested Installation custom actions. The Source column must contain a valid GUID (MSI product code).
ICE12 Validates type 35 and type 51 custom actions and their locations in the sequence tables.
ICE13 Validates that dialogs are not listed as actions in the execute sequence tables. Dialog actions are only allowed in the user interface sequence tables.
ICE14 Validates that feature parents do not have msidbFeatureAttributesFollowParent bit set. Also validates that the entries in the Feature and Feature_Parent columns are not the same in the same record.
ICE15 Validates that a circular reference exists between every entry in the MIME table and the corresponding extension in the Extension table.
ICE16 Validates that the ProductName in the Property table is not greater than 63 characters in length.
ICE17 Validates control type dependencies in the Control table. Covers PushButtons, RadioButtonGroups, ListBoxes, ListViews, and ComboBoxes
ICE18 Validates the KeyPath column of the Component table when it is NULL. In this case, the key path is a Directory.
ICE19 Validates the advertising tables: Class, TypeLib, Extension, PublishComponents, and Shortcut.
ICE20 Validates that the required dialogs are in the Dialog table.
ICE21 Validates that all components in the Component table map to a feature in the FeatureComponents table.
ICE22 Validates that the Feature_ and Component_ columns in the PublishComponent table.
ICE23 Validates the tab order of controls in all dialog boxes.
ICE24 Validates certain properties in the Property table.
ICE25 Verifies merge module dependencies and merge module exclusions.
ICE26 Validates required and prohibited actions in the sequence tables.
ICE27 Validates the organization and order of the sequence tables.
ICE28 Validates actions that must not be separated by ForceReboot.
ICE29 Validates that your stream names remain unique if truncated to the 62 character limit.
ICE30 Validates that the installation of components containing the same file never installs the file more than once in the same directory.
ICE31 Validates the text styles listed in the Text column of the control table.
ICE32 Compares the column definitions to validates that keys and foreign keys are of the same size and type.
ICE33 Checks for entries in the registry table that belong in other tables.
ICE34 Validates that every group of radio buttons has a default.
ICE35 Validates that any files from a cabinet file cannot be set to run from source
ICE36 Validates that icons listed in the Icon table are used the Class, ProgID, or Shortcut tables.
ICE38 Validates that components installed under the user’s profile use a registry key under HKCU as their key path.
ICE39 Validates the Summary Information stream of the database.
ICE40 Performs various miscellaneous checks
ICE41 Validates that entries in the Extension and Class tables refer to components belonging to the referenced feature.
ICE42 Checks that Class table entries don’t have EXEs set as InProc, and that only LocalServer contexts have arguments and DefInProc values.
ICE43 Checks that non-advertised shortcuts are in components with HKCU reg keys as the key paths.
ICE44 Checks that dialog events in the ControlEvent table (NewDialog, SpawnDialog, SpawnWaitDialog) reference valid Dialogs in the Dialog table.
ICE45 Checks for reserved bits that are set.
ICE46 Checks for custom properties that only differ from defined properties by their case.
ICE47 Checks for features with more than 1600 components per feature on Windows NT/Windows 2000 and more than 800 components per feature on Windows 95 and Windows 98.
ICE48 Checks for directories that are hard-coded to local paths.
ICE49 Checks for non-REG_SZ default values in the registry table.
ICE50 Checks that advertised shortcuts have correct icons and context menus.
ICE51 Checks that TTC/TTF fonts do not have titles, but that all other fonts do.
ICE52 Checks for non-public properties in the AppSearch table.
ICE53 Checks for registry entries that write private installer information or policy values.
ICE54 Checks for components using companion files as their key path file.
ICE55 Checks that LockPermission objects exist and have valid permissions.
ICE56 Validates that the directory structure of the .msi file has a single valid root.
ICE57 Validates that individual components do not mix per-machine and per-user data.
ICE58 Checks that your Media table does not have more than 80 rows.
ICE59 Checks that advertised shortcuts belong to components that are installed by the target feature of the shortcut.
ICE60 Checks that if a file in the File table is not a font and has a version, then it also has a language.
ICE61 Checks the Upgrade table.
ICE62 Performs extensive checks on the IsolatedComponent table for data that may cause unexpected behavior.
ICE63 Checks for proper sequencing of the RemoveExistingProducts action.
ICE64 Checks that new directories in the user profile are removed in roaming scenarios
ICE65 Checks that the Environment table does not have invalid prefix or append values.
ICE66 Uses the tables in the database to determine which schema your database should use.
ICE67 Checks that the target of a non-advertised shortcut belongs to the same component as the shortcut itself, or that the attributes of the target component ensure that it does not change installation locations.
ICE68 Checks that all custom action types needed for an installation are valid.
ICE69 Checks that all substrings of the form [$componentkey] within a Formatted string do not cross-reference components.
ICE70 Verifies that integer values for registry entries are specified correctly
ICE71 ICE71 verifies that the Media table contains an entry with DiskId equal to 1.
ICE72 ICE72 ensures that the only custom actions used in the AdvtExecuteSequence table are type 19, type 35, and type 51 custom actions
ICE73 ICE73 verifies that your package does not reuse package codes or product codes of the Windows Installer SDK samples. See Package Codes and Product Codes.
ICE74 ICE74 verifies that the FASTOEM property has not been authored into the Property Table.
ICE75 ICE75 verifies that all custom action types that use an installed file as their source are sequenced after the CostFinalize action.
ICE76 ICE76 verifies that no files in the BindImage table reference SFP (WFP) catalogs.
ICE77 ICE77 verifies that in-script custom actions are sequenced after the InstallInitialize action and before the InstallFinalize action.
ICE78 ICE78 verifies that that the AdvtUISequence table either does not exist or is empty.
ICE79 ICE79 validates references to components and features entered in the database fields using the Condition data type.
ICE80 ICE80 validates that Template Summary Property and Page Count Summary Property correctly specify the presence of 64-bit components or custom action scripts.
ICE81 Validates the MsiDigitalCertificate table and MsiDigitalSignature table.
ICE82 Validates the InstallExecuteSequence table.
ICE83 Validates the MsiAssembly table.
ICE84 Checks the sequence tables to verify that required standard actions have not been set with conditions.
ICE85 Validates that the SourceName column of the MoveFile table is a valid long file name.
ICE86 Issues a warning if the package uses the AdminUser property in database column of the Condition type.
ICE87 Validates that the following properties have not been authored in the Property Table.
ICE89 Validates that the value in the Progid_Parent column in ProgId table is a valid foreign key into the ProgId column in ProgId table.
ICE90 Posts a warning if it finds that a shortcut’s directory has been specified as a public property.
ICE91 Posts a warning if a file, .ini file, or shortcut file is installed into a per-user profile directory that does not vary based on the ALLUSERS property.
ICE92 Verifies that a component without a Component Id GUID is not also specified as a permanent component.
ICE93 Issues a warning if a custom action uses the same name as a standard action.
ICE94 Issues a warning if there are any unadvertised shortcuts pointing to an assembly file in the global assembly cache.
ICE95 Checks the Control table and BBControl table to verify that the billboard controls fit onto all the billboards.
ICE96 Verifies that the PublishFeatures action and the PublishProduct action are entered in the AdvtExecuteSequence table.


Active Setup Registry Keys

August 29, 2011 Leave a comment
Following Registries are to be included in package to load User settings(either registries/files) so that by the time User
logs in his current user settings will be available on the machine.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\[ProductCode]]
"StubPath"="msiexec /fup {9A346205-EA92-4406-B1AB-50379DA3F057} /qn"

Installshield Training

August 28, 2011 Leave a comment

New batch of Application Packaging Classroom training using Installshield/Wise Packaging Studio is starting at Hyderabad on3rd September. If you are interested contact me at 91-9963678795 or

For training details please visit


Get every new post delivered to your Inbox.

Join 122 other followers