Compartir a través de


ICEM09

ICEM09 comprueba que el módulo de combinación controla de manera segura los directorios predefinidos. Para ello, comprueba que ningún componente del módulo instale un directorio en un directorio del sistema predefinido, como "ProgramFilesFolder" o "StartMenuFolder". En su lugar, los módulos deben usar directorios con nombres únicos (creados con la convención de nomenclatura de módulo de combinación) y usar acciones personalizadas para tener como destino el directorio de destino adecuado. Este enfoque impide que los módulos entren en conflicto con una estructura de directorios existente en la base de datos final. ICEM09 comprueba que las acciones personalizadas que se necesitan para que esta técnica funcione no existen (para que la herramienta de combinación pueda generarlas) o existan con el formato correcto (de modo que funcionen según lo previsto).

Si no se corrige una advertencia o un error notificado por ICEM09, podría haber problemas para los clientes del módulo de combinación. Las filas de la tabla Directory con claves principales, como ProgramFilesFolder, suelen existir en una base de datos; por lo tanto, si los componentes del módulo se instalan directamente en directorios predefinidos, como ProgramFilesFolder, las entradas de directorio del módulo pueden entrar en conflicto con filas ya existentes. Esta condición requeriría que el usuario del módulo divida los archivos de origen del módulo para que coincidan con el directorio de origen existente.

Resultado

ICEM09 notifica un error o una advertencia cuando un componente del módulo instala un directorio en un directorio predefinido del sistema, lo que provoca un posible conflicto de nombres con la estructura de directorios existente.

Ejemplo

ICEM09 publica las advertencias siguientes para un módulo que contiene las entradas de base de datos mostradas.

Warning: The component 'Component1.<GUID>' installs directly into the pre-defined 
directory 'ProgramFilesFolder'. It is recommended that merge modules alias 
all such directories to unique names.

Cambie el nombre del directorio del módulo de combinación para que no coincida con una propiedad de Windows Installer y, por lo tanto, sea único. A continuación, establezca una propiedad del mismo nombre en el valor del directorio de Windows Installer. Cuando se produce la resolución de directorios, el directorio tiene una propiedad con el mismo nombre, por lo que la ubicación de instalación del directorio es el valor de la propiedad. Los archivos se mueven de la ubicación de origen distinta a la misma ubicación de destino. Este proceso debe quitar completamente los conflictos de combinación.

Warning: The 'ModuleInstallExecuteSequence' table contains a type 51 action 
(StartMenuFolder.<GUID>) for a pre-defined directory, but this action 
does not have sequence number '1'

Si la acción no tiene el número de secuencia 1, es posible que no se combine en la base de datos de destino lo suficientemente pronto como para que funcione de manera eficaz.

Para corregir esta advertencia, establezca el número de secuencia en 1. Tenga en cuenta que la mayoría de las herramientas de combinación actuales (pero no algunas versiones anteriores) generarán estas acciones personalizadas en el momento de la combinación, por lo que no siempre es necesario crear explícitamente las acciones en el módulo de combinación.

Warning: The 'CustomAction' table contains a type 51 action (MyAppDataFolderAction) 
for a pre-defined directory, but the name is not the same as the target directory. 
Many merge tools will generate duplicate actions."

Dado que la columna CustomAction es la clave principal de la tabla CustomAction, algunas herramientas de combinación pueden generar acciones duplicadas porque el nombre de acción creado previamente es diferente.

Para corregir esta advertencia, asigne a la acción el mismo nombre que el del directorio de destino. Tenga en cuenta que la mayoría de las herramientas de combinación actuales (pero no algunas versiones anteriores) generan estas acciones personalizadas en el momento de la combinación, por lo que no siempre es necesario crear explícitamente las acciones en el módulo de combinación.

Directory (tabla)

Directorio Directory_Parent DefaultDir
ProgramFilesFolder Directory1 A
StartMenuFolder Directory2 B:C
AppDataFolder Directory3 D
MyPicturesFolder Directory4 E

 

Component (tabla)

Componente Directorio
Component1.<GUID> ProgramFilesFolder
Component2.<GUID> StartMenuFolder
Component3.<GUID> AppDataFolder
Component4.<GUID> MyPicturesFolder

 

CustomAction (tabla)

CustomAction Tipo Source Destino
StartMenuFolder.<GUID> 51 StartMenuFolder.<GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID> [AppDataFolder]

 

ModuleInstallExecuteSequence Table

Acción Secuencia BaseAction Después Condición
StartMenuFolder.<GUID> 100

 

Referencia ICE del módulo de combinación