- Revenera Community
- :
- InstallShield
- :
- InstallShield Knowledge Base
- :
- Basic MSI Project: Components Getting Installed Dynamically
- Mark as New
- Mark as Read
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
Basic MSI Project: Components Getting Installed Dynamically
Basic MSI Project: Components Getting Installed Dynamically
Summary
This article discusses a scenario when the installer lays down components, such as DLLs, Windows Registry entries, or shortcut files, these components are getting installed as dynamic components.
Project Type
Basic MSI
Symptoms
When trying to not install any component as a dynamic component, there are duplicate components prefixed with a double underscore with a 65 appended and the components are being installed as dynamic components anyway.
MSI (s) (28:C4) [18:00:52:463]: Component: Shortcut; Installed: Absent; Request: Local; Action: Local; Client State: Unknown
MSI (s) (28:C4) [18:00:52:463]: Component: __ServerDLL65; Installed: Null; Request: Local; Action: Local; Client State: Null
MSI (s) (28:C4) [18:00:52:463]: Component: __JDProcessorDLL65; Installed: Null; Request: Local; Action: Local; Client State: Null
MSI (s) (28:C4) [18:00:52:463]: Component: __ProcessorDLL65; Installed: Null; Request: Local; Action: Local; Client State: Null
MSI (s) (28:C4) [18:00:52:463]: Component: __Registry65; Installed: Null; Request: Local; Action: Local; Client State: Null
MSI (s) (28:C4) [18:00:52:463]: Component: __NotificationReg65; Installed: Null; Request: Local; Action: Local; Client State: Null
MSI (s) (28:C4) [18:00:52:463]: Component: __Shortcut65; Installed: Null; Request: Local; Action: Local; Client State: Null
MSI (s) (28:C4) [18:00:52:463]: Component: JDProcessorDLL; Installed: Absent; Request: Local; Action: Local; Client State: Unknown
MSI (s) (28:C4) [18:00:52:463]: Component: JDProcessorINI; Installed: Absent; Request: Local; Action: Local; Client State: Unknown
MSI (s) (28:C4) [18:00:52:463]: Component: ProcessorDLL; Installed: Absent; Request: Local; Action: Local; Client State: Unknown
Discussion
There are cases where a component can install resources into locations other than the location referenced in the Directory_ column. In order to account for that and to more accurately adjust costing when a Directory's target location changes, such as when the user alters the install location, the installer uses a mechanism called cost-linking. For each alternate target folder for the component, the installer creates a new subcomponent.
Cost-linking is used to account for the following MSI tables: Shortcut, RemoveFile, MoveFile, DuplicateFile, Registry,IniFile.
Cost-linking is also used for all global/shared assembly components.
Action start <time>: InstallValidate. MSI (s) <process info>: Feature: Simple; Installed: Absent; Request: Local; Action: Local MSI (s) <process info>: Component: Simple7890123456789012345678901234567890123456789012345; Installed: Absent; Request: Local; Action: Local MSI (s) <process info>: Component: __ Simple789012345678901234567890123456789065; Installed: Null; Request: Local; Action: Local
For example, let's look again at the InstallValidate action dump from above for an example setup where the component installs both a file and a registry key.
Note the subcomponent. That component was created to account for cost associated with the registry key. It's a cost-linked component for the component + WindowsFolder directory. The component's current cost (for the parent) is associated with the SimpleDir directory which is the authored directory for the component in the Component table. At this point, the component doesn't have any previously created child components so it starts with a suffix of 65. Also, only the first 40 characters were used of the component name (which had 55 characters).