Condividi tramite


Costruzione di un ICE

Se non si riesce a trovare gli analizzatori di coerenza interna necessari tra le azioni personalizzate ICE esistenti elencate nella guida di riferimento ICE, sarà necessario preparare il proprio ICE per convalidare il pacchetto.

Quando si creano azioni personalizzate ICE, è necessario eseguire le operazioni seguenti:

  • Basare gli ices solo sulle azioni personalizzate dei tipi elencati nella tabella illustrata.
  • Chiamare MsiProcessMessage e pubblicare un tipo di messaggio di INSTALLMESSAGE_USER. Quando si creano i messaggi ICE, seguire il formato del messaggio nelle linee guida per i messaggi ICE.
  • Scrivere ice in modo che acquisisca eventuali errori dell'API e restituisca sempre ERROR_SUCCESS. Ciò è necessario per consentire l'esecuzione di azioni personalizzate successive in seguito all'errore di un ice.

Le azioni personalizzate ICE sono limitate ai seguenti tipi di azioni personalizzate.

Tipo di azione personalizzato Descrizione
Tipo di azione personalizzato 1 DLL nel flusso binario
Tipo di azione personalizzato 2 EXE nel flusso binario
Tipo di azione personalizzato 5 JScript nel flusso binario
Tipo di azione personalizzato 6 VBScript nel flusso binario
Tipo di azione personalizzato 37 Codice JScript come stringa
Tipo di azione personalizzato 38 Codice VBScript come stringa

 

Quando si crea un'azione personalizzata ICE, non eseguire le operazioni seguenti:

  • Non presupporre che l'handle al motore ricevuto da ICE sia un'istanza di installazione del database del programma di installazione. Se non è un'istanza di installazione, alcune proprietà non vengono definite, le directory di origine e di destinazione non vengono risolte e gli stati di funzionalità correnti non vengono definiti.
  • Non fare affidamento sull'esecuzione precedente, o non sull'esecuzione, di alcuna azione del programma di installazione, di un'azione personalizzata o di un altro ice. Poiché un ice precedente potrebbe aver creato colonne temporanee in qualsiasi tabella, gli autori devono fare riferimento alle colonne in base al nome, quando possibile. Gli ices devono pulire tutte le colonne o le tabelle temporanee prima di uscire.
  • Non presupporre che gli autori abbiano accesso a un'immagine della directory di origine del database.
  • Non presupporre che le modifiche apportate al database non siano persistenti.

Ice di esempio in C++

Ice di esempio in VBScript