para modificar metaetiqueta etiquetas ejemplos editar como agregar wix installation windows-installer burn dtf

wix - modificar - Obtenga el costo de instalación de características antes de la instalación



metaetiqueta wix (2)

Esta no es la respuesta que está buscando, pero sugiero que se calcule previamente el tamaño de las características en el momento de la compilación y el uso de una tabla precalculada durante la instalación. Esto es lo que hacemos en Burn en WiX v3.6. Es mucho más rápido y mucho más estable.

Estamos haciendo una interfaz de usuario boostrapper / externa personalizada para nuestra instalación.

Queremos proporcionar un cuadro de diálogo "Instalación personalizada" (como en MSI) para permitir al usuario elegir la (s) característica (es) que desea instalar o eliminar.

Actualmente, podemos leer las características (y otros detalles de características como la descripción) de la base de datos MSI (ejecutando una consulta SQL en la tabla de Feature ).

Sin embargo, también queremos mostrar el costo de instalación de una función. El cuadro de diálogo "Instalación personalizada" de Windows Installer es capaz de hacer esto.

Creo que podemos imitar el comportamiento haciendo lo siguiente:

  1. Elija una Feature que desea obtener el costo
  2. Usando la tabla FeatureComponents , obtenga el Component asociado con la función desde 1
  3. Usando la tabla File , agregue el FileSize de FileSize de los archivos asociados con el componente identificado en 2
  4. La suma de 3 es el costo de la instalación de características

Pregunta:

  1. ¿Existe una API (ya sea de DTF o MSI.DLL) que podamos usar para obtener el costo de una función ANTES de la instalación? (Hay un método FeatureInfo.GetCost en DTF pero no puede usarlo directamente. El producto debe instalarse antes de poder llamar a FeatureInfo.GetCost desde ProductInstallation )
  2. Si no hay API, ¿el procedimiento indicado arriba es apropiado o correcto para calcular el costo de una instalación de características?

¡Gracias! :)

ACTUALIZACIÓN # 1

Creo que hay una manera de obtener el costo de una instalación de características a través de la API, incluso ANTES de comenzar la instalación. Así es como lo hice:

Installer.SetInternalUI(InstallUIOptions.Silent); Session s = Installer.OpenPackage(@"C:/a.msi", false); foreach (FeatureInfo info in s.Features) { MessageBox.Show(info.Name); MessageBox.Show(info.GetCost(false, false, InstallState.Unknown).ToString()); } s.Close();

llamar info.name devuelve con éxito el nombre de la característica. Sin embargo, llamar info.GetCost devolverá una InvalidHandlerException con un mensaje: "gestor de selección no inicializado".

Aquí es donde estoy actualmente.

Actualización # 2:

InvalidHandlerException la InvalidHandlerException porque no estoy invocando las rutinas de cálculo de costos necesarias antes de llamar a info.GetCost . Aquí está mi código modificado:

Installer.SetInternalUI(InstallUIOptions.Silent); Session s = Installer.OpenPackage(@"C:/1.msi", false); s["ROOTDRIVE"] = @"C:/"; s.DoAction("CostInitialize"); s.DoAction("FileCost"); s.DoAction("CostFinalize"); foreach (FeatureInfo info in s.Features) { long cost = info.GetCost(false, false, InstallState.Local); MessageBox.Show(info.Title + " " + cost); } s.Close();

Ya no recibo la InvalidHandlerException, pero el costo del archivo que se devuelve es -1099511627776.


Sí, hay una API. Necesita obtener una sesión de MSI llamando a OpenPackage. Al hacerlo, tendrá acceso a la lista de características que le dará acceso al método GetCost.

1 Encontrado : debe realizar 4 acciones estándar antes de calcular el costo: CostInitialize , FileCost , CostFinalize e InstallValidate .

Installer.SetInternalUI(InstallUIOptions.Silent); Session s = Installer.OpenPackage(@"C:/1.msi", false); s.DoAction("CostInitialize"); s.DoAction("FileCost"); s.DoAction("CostFinalize"); s.DoAction("InstallValidate"); foreach (FeatureInfo info in s.Features) { long cost = info.GetCost(false, false, InstallState.Local); MessageBox.Show(info.Title + " " + cost); } s.Close();