Condividi tramite


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 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 in modo che corrisponda 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 si spostano dal percorso di origine distinto alla stessa posizione di destinazione. Questo processo deve 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 unione correnti (ma non alcune versioni precedenti) genererà queste azioni personalizzate in fase di unione, quindi 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 unione 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 Un
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

 

di tabella CustomAction

CustomAction Digitare Fonte Bersaglio
StartMenuFolder.<GUID> 51 StartMenuFolder.<GUID> [StartMenuFolder]
MyAppDataFolderAction 51 AppDataFolder.<GUID> [AppDataFolder]

 

ModuleInstallExecuteSequence Table

Azione Sequenza BaseAction Dopo Condizione
StartMenuFolder.<GUID> 100

 

di riferimento ICE del modulo merge