Share via


ICEM09

ICEM09 verifica che il modulo di merge gestisca in modo sicuro le directory predefinite. Questa operazione viene eseguita verificando che nessun componente nel modulo installi una directory in una directory di sistema predefinita, ad esempio "ProgramFilesFolder" o "StartMenuFolder". I moduli devono invece usare directory con nomi univoci (creati con la convenzione di denominazione del modulo di merge) e usare azioni personalizzate per specificare come destinazione la directory di destinazione appropriata. Questo approccio impedisce ai moduli di conflitto con una struttura di directory esistente nel database finale. ICEM09 verifica che le azioni personalizzate necessarie per questa tecnica non esistano (in modo che lo strumento di unione possa generarle) o esistano nel formato corretto (in modo che funzionino come previsto).

L'errore di correzione di un avviso o di un errore segnalato da ICEM09 potrebbe causare problemi per i client del modulo di merge. Le righe della tabella di directory con chiavi primarie, ad esempio ProgramFilesFolder, spesso esistono in un database; pertanto, se i componenti del modulo vengono installati direttamente in directory predefinite, ad esempio ProgramFilesFolder, le voci di directory nel modulo potrebbero essere in conflitto con le righe già esistenti. Questa condizione richiede all'utente del modulo di suddividere i file di origine dal modulo per corrispondere alla directory di origine esistente.

Risultato

ICEM09 segnala un errore o un avviso quando un componente del modulo installa una directory in una directory di sistema predefinita, causando un possibile conflitto di nomi con la struttura di directory esistente.

Esempio

ICEM09 invia gli avvisi seguenti per un modulo contenente le voci del database visualizzate.

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.

Rinominare la directory del modulo di merge in modo che non corrisponda a una proprietà di Windows Installer e pertanto sia univoca. Impostare quindi una proprietà con lo stesso nome sul valore della directory di Windows Installer. Quando viene eseguita la risoluzione della directory, la directory ha una proprietà con lo stesso nome, quindi il percorso di installazione della directory è il valore della proprietà . I file passano dal percorso di origine distinto alla stessa posizione di destinazione. Questo processo dovrebbe rimuovere completamente i conflitti di unione.

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'

Se l'azione non dispone del numero di sequenza 1, è possibile che non venga eseguita l'unione nel database di destinazione abbastanza presto nella sequenza per funzionare in modo efficace.

Per correggere questo avviso, impostare il numero di sequenza su 1. Si noti che la maggior parte degli strumenti di merge correnti (ma non alcune versioni precedenti) genererà queste azioni personalizzate in fase di unione, pertanto non è sempre necessario creare in modo esplicito le azioni nel modulo di merge.

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

Poiché la colonna CustomAction è la chiave primaria della tabella CustomAction, alcuni strumenti di merge possono generare azioni duplicate perché il nome dell'azione preautore è diverso.

Per correggere questo avviso, assegnare all'azione lo stesso nome della directory di destinazione. Si noti che la maggior parte degli strumenti di unione correnti (ma non alcune versioni precedenti) genera queste azioni personalizzate in fase di unione, pertanto non è sempre necessario creare in modo esplicito le azioni nel modulo di merge.

Tabella directory

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

 

Tabella dei componenti

Componente Directory
Componente1.< GUID> ProgramFilesFolder
Componente2.< GUID> StartMenuFolder
Componente3.< GUID> AppDataFolder
Componente4.< GUID> MyPicturesFolder

 

Tabella CustomAction

CustomAction Tipo Source (Sorgente) Destinazione
StartMenuFolder.< GUID> 51 StartMenuFolder.< GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.< GUID> [AppDataFolder]

 

Tabella ModuleInstallExecuteSequence

Azione Sequenza BaseAction After Condizione
StartMenuFolder.< GUID> 100

 

Riferimento ICE del modulo merge