cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

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).

Was this article helpful? Yes No
No ratings
Version history
Last update:
‎Feb 25, 2021 08:06 AM
Updated by: