2008-12-15 23 views
5

Estoy creando un instalador para el proyecto aC# windows utilizando VS 2008. Estoy intentando escribir una acción personalizada que copie un archivo de configuración de la fuente directorio del archivo MSI almacenado en un servidor de archivos (por ejemplo, \ server \ fileshare \ myappinstaller \ mysetting.xml) en el directorio de destino de la computadora en la que se instaló mi aplicación (por ejemplo, C: \ Program Files \ My App).Necesito una acción personalizada MSI que copie un archivo del directorio fuente MSI

El archivo de configuración no se puede añadir en el instalador, ya que contiene la configuración con será único para el cliente la instalación de la aplicación.

¿Alguien tiene el código (preferiblemente C# o VB.NET) para una acción de tal costumbre? De forma alternativa, cualquier persona sabe cómo obtener la ubicación de origen de MSI (por ejemplo, \ server \ fileshare \ myappinstaller) dentro de una acción personalizada.

Muchas gracias

Respuesta

2

yo recomendaría que usted agregue el archivo XML para el instalador como uno de los componentes que se instalarán. Esa sería la forma más fácil y no requeriría una acción personalizada.

WiX podría ser una opción para usted. Le permite personalizar archivos de configuración XML durante la instalación usando XmlConfig.

0

acciones personalizadas Normalmente en WindowsInstaller utilizan algo de las tablas de la MSI poner algo en cualquier mesa de la MSI.

Además, el WindowsInstaller-Team declina cualquier extensiones administradas para los instaladores, las razones de que se encuentran en todas partes en la red.

Pero, lo hice hace algún tiempo averiguar una extensión a create managed custom actions para WindowsInstallers, utilizable con WiX, que funciona todavía, pero hay una solución más reciente en la parte superior de ese trabajo, una extensión real de WiX para permitir acciones personalizadas administradas .

1

que hacer algo similar, pero enviamos una configuración por defecto en el archivo MSI y luego usar un MST para añadir el archivo de configuración personalizado. Es mucho más confiable ya que todo es "nativo" para el instalador de Windows y solo tengo que enviar un pequeño MST personalizado a cada cliente.

Más información sobre cómo lo estoy haciendo esto se puede encontrar en más de Simplest solution to replace a tiny file inside an MSI?

5

He resuelto esto añadiendo

/InstallerPath = "[OriginalDatabase]"

a CustomActionData de la acción personalizada (en la pestaña Acciones personalizadas del proyecto de instalación) y leer el valor con este código en la acción personalizada:

Public Overrides Sub Commit(ByVal savedState As System.Collections.IDictionary) 
     MyBase.Commit(savedState) 

     Dim directoryOfMSI As String = IO.Path.GetDirectoryName(Context.Parameters("InstallerPath")) 

     'Do your work here 
     '... 

    End Sub 

Ciao! Stefan