Solucionar problemas de implementación de Windows Installer
Actualización: noviembre 2007
En los temas de esta sección se explican distintos problemas que pueden producirse al crear proyectos de implementación e implementar aplicaciones.
Una aplicación MFC no se localiza cuando está instalada en un equipo cuya configuración regional no es inglés
Al implementar una aplicación MFC utilizando un proyecto de implementación de Visual Studio, no se detectan las dependencias de los módulos de combinación localizados Mfc_loc_e.msm y Mfc_loc_fe.msm. Los módulos de combinación se incluyen con Visual C++; la ubicación de instalación predeterminada es \Archivos de programa\Archivos comunes\Módulos de combinación. Para poder distribuir una aplicación MFC localiza, los dos módulos de combinación deben agregarse manualmente al proyecto de implementación. Para obtener más información, vea Implementación y dependencias.
No se detectaron las dependencias de ensamblado
Al agregar a un proyecto de implementación el grupo de resultados de un proyecto, un ensamblado o un módulo de combinación, los ensamblados dependientes se detectan y se agregan automáticamente al proyecto. Si un ensamblado dependiente se carga en tiempo de ejecución mediante código, las herramientas de implementación no podrán detectarlo. En la medida de lo posible, evite cargar ensamblados desde el código; si lo hace, deberá agregar manualmente al proyecto de implementación los ensamblados dependientes. Para obtener más información, vea Implementación y dependencias.
No pueden encontrarse los archivos en un servidor web después de instalarlos
Al instalar un programa de instalación web en un servidor web, la propiedad VirtualDirectory de la carpeta de aplicación web y cualquier otra carpeta web personalizada determinan dónde se instalarán los archivos de esas carpetas con respecto a la raíz web. Si esta propiedad se deja en blanco, los archivos se instalarán en la carpeta Web raíz (inetpub\wwwroot). Para obtener más información, vea VirtualDirectory (Propiedad).
¿Cómo se instala una aplicación Web en el directorio raíz del servidor Web?
De forma predeterminada, al instalar una aplicación web utilizando un proyecto de implementación de programa de instalación web, los archivos se instalan en una carpeta con el mismo nombre que el proyecto de implementación, directamente bajo la carpeta raíz del Web. La propiedad VirtualDirectory de la carpeta de aplicación Web determina dónde se instalan los archivos. Para realizar la instalación en el directorio web raíz, cambie la propiedad VirtualDirectory a null (elimine el valor predeterminado). Para obtener más información, vea VirtualDirectory (Propiedad).
Las aplicaciones Web implementadas con el comando Xcopy no se pueden depurar
Cuando se copia una aplicación Web en un servidor Web mediante el comando Xcopy, Internet Information Services (IIS) no se configuran automáticamente para la aplicación. La depuración no funcionará porque la carpeta de la aplicación no se reconoce como raíz de la aplicación.
Después de copiar los archivos, tendrá que definir la nueva carpeta como raíz de la aplicación mediante el Administrador de IIS. Además, debería definir los permisos para la carpeta Bin de la aplicación con el fin de impedir que se descarguen las DLL.
Sugerencia: |
---|
En vez de utilizar el comando Xcopy, considere el uso del comando Copiar proyecto o de un proyecto de implementación de programa de instalación Web. Para obtener más información, vea Alternativas de implementación. |
¿Cómo desactivo el análisis de dependencias?
No existe ningún método directo para desactivar la búsqueda y resolución de análisis de dependencias. Sin embargo, existe una solución alternativa: puede desactivar la opción Incluir rutas de acceso de búsqueda estándar en el cuadro de diálogo que aparece al hacer clic en la propiedad SearchPath.
Deben tenerse en cuenta una serie de consideraciones adicionales:
Los archivos deben agregarse con el comando Agregar archivo (en el menú Proyecto, seleccione Agregar y, a continuación, Archivo). Si usa Agregar resultados del proyecto (en el menú Proyecto, seleccione Agregar y, a continuación, Resultados del proyecto), se incluirán las dependencias indicadas en el proyecto de código.
Al generar un proyecto, es posible que aparezcan una o varias advertencias de tipo No se puede encontrar la dependencia pero, en este caso, pueden pasarse por alto.
Si sólo desea desactivar el análisis de dependencias para algunos archivos, puede incluir dichos archivos en un proyecto de módulo de combinación con las rutas de acceso de búsqueda estándar desactivadas. A continuación, use Agregar módulo de combinación (en el menú Proyecto, seleccione Agregar y, a continuación, Agregar módulo de combinación) para incluir el archivo .msm en un proyecto de instalación normal con las rutas de acceso de búsqueda estándar activadas.
¿Cómo desactivo la reparación en un archivo que se espera que los usuarios modifiquen o eliminen?
Visual Studio crea accesos directos anunciados de forma que, cuando el programa se inicia, comprueba la existencia de todos sus archivos. Para modificar este comportamiento de modo que Visual Studio no repare el archivo, seleccione los archivos del proyecto de instalación y cambie la propiedad Condition a NOT REINSTALL para que el archivo no vuelva a instalarse durante una reparación, y establezca la propiedad Transitive en TRUE para que la condición vuelva a evaluarse. Esto hace que el instalador aparezca brevemente en la pantalla tras la eliminación del archivo, para comprobar que el archivo no vuelve a instalarse; después de esto, ya no verá el instalador.
¿Cómo depuro una clase de acción/instalador personalizada?
Puede utilizar alguno de los siguientes métodos:
Agregue una llamada en su código a System.Diagnostics.Debugger.Launch. Este método abre la depuración Just-In-Time y le permite asociar un nuevo depurador al código.
Agregue una llamada en su código a MessageBox.Show("Debug Me"). Cuando se muestre el cuadro de mensaje, use Visual Studio para asociarlo al proceso MessageBox. A continuación, agregue saltos (en proyectos de Visual C#) o paradas (en proyectos de Visual Basic) en el código.
Establezca sus preferencias de depuración para iniciar InstallUtil.exe (que se encuentra en \winnt\Microsoft.net\Framework\versión) y pasarle su ensamblado como un parámetro. Cuando presiona F5, visita el punto de interrupción. InstallUtil.exe ejecutará las acciones personalizadas de la misma manera que lo hace MSI.
No funciona el registro de ensamblados con interfaces COM
Se trata de un error RegAsm conocido. Si el ensamblado incluye una dependencia, por ejemplo, de otra biblioteca de clases, puede que RegisterCOM no funcione ya que se llama a RegAsm para obtener la información de registro. Como se llama a RegAsm en el directorio \obj, la dependencia no se encuentra y se produce un error sin notificación en RegAsm. La mejor solución consiste en agregar manualmente el ensamblado desde el directorio \bin. Otra solución consiste en utilizar RegisterSelfReg.
Asegúrese también de que realiza el registro manualmente mediante RegAsm/Codebase. Si el ensamblado no está en una ubicación compartida, no se encuentra a menos que esté en el mismo directorio que el código de llamada. /Codebase escribe el directorio en el Registro.
¿Cómo soluciono problemas en las instalaciones de Windows Installer utilizando archivos de registro?
Windows Installer graba en un archivo de registro las operaciones que lleva a cabo mientras instala programas. El archivo de registro se sitúa en el directorio donde se encuentra el archivo .msi.
¿Cómo obtengo un archivo de registro para mi instalación?
Existen dos formas:
Realice la ejecución desde la línea de comandos con el modificador de registro.
misexec /i mysetup.msi /l*v mylog.txt
Guarde el siguiente texto como un archivo .reg y cárguelo en el Registro.
REGEDIT4 [HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer] "Logging"="voicewarmup" "Debug"=dword:00000007
A continuación, abra el directorio \temp y ordene los archivos por fecha. El archivo msi*.log más reciente corresponde a la operación de instalación o desinstalación más reciente.
¿Cómo realizo la instalación en el subdirectorio de un producto previamente instalado?
Supongamos que el producto previamente instalado, Producto 1, está instalado y tiene un archivo denominado MyFile.txt.
Utilice ORCA (del Kit de desarrollo de software de Windows Installer) para ver la tabla File y busque la fila que representa MyFile.txt.
Obtenga el valor de la columna Component_ y, a continuación, abra la tabla Component.
En la tabla de componentes, busque la fila que tiene el valor Component_ en la columna de componente y obtenga el ComponentID. Copie este valor en el Portapapeles. Cierre ORCA.
En su proyecto de instalación, abra el Editor de condiciones de inicio y agregue una búsqueda de componentes de Windows Installer. Pegue el ComponentID en la propiedad ComponentID de la nueva búsqueda.
Copie la propiedad Property. Debería ser similar a COMPONENTEXISTS1.
Abra el Editor del sistema de archivos y seleccione la carpeta de la aplicación.
Edite la propiedad DefaultLocation de forma que resulte similar a [COMPONENTEXISTS1]MySubFolder (dado que la ruta de acceso en COMPONENTEXISTS1 incluye una barra diagonal inversa '\' final).
Una vez efectuado el paso 6 del procedimiento anterior, es posible que desee agregar una condición al Editor de condiciones de inicio para comprobar si se ha encontrado el componente y para bloquear la instalación y mostrar un mensaje si no se encuentra. La condición sería COMPONENTEXISTS1 (que significa que puede ejecutarse Installer si COMPONENTEXISTS1 no está vacío).
¿Cómo instalo carpetas Web personalizadas en un puerto no predeterminado?
Para instalar las carpetas web personalizadas en un puerto que no esté designado de forma predeterminada, ejecute la instalación desde la línea de comandos. El comando debe incluir los valores de la propiedad Property de cada una de las carpetas Web personalizadas. Normalmente, un valor debería ser similar a NEWWEBPROPERTY1. También necesita incluir TARGETPORT para la carpeta de aplicación Web.
Por ejemplo, si el servidor Web está en el puerto 20, la línea de comandos debería tener el siguiente aspecto:
msiexec /i mywebsetup.msi TARGETPORT=20 NEWWEBPROPERTY1PORT=20
El comando anterior es para una sola carpeta web. Si tiene más de una carpeta web, agregue más pares PROPERTY=VALUE, tal y como se ha especificado anteriormente, a cada carpeta para redirigir el puerto de cada carpeta mostrada al puerto especificado.
Puede que desee quitar el cuadro de diálogo Dirección de la instalación ya que, si alguien cambia el puerto en la interfaz de usuario durante la instalación, las carpetas Web personalizadas utilizarán el valor de la línea de comandos.
¿Cómo instalo en la raíz de un sitio Web?
Para instalar en la raíz de un sitio Web, por ejemplo c:\inetpub\wwwroot, establezca VirtualDirectory en una cadena vacía en el proyecto de instalación Web o durante la instalación.
¿Cómo instalo un elemento ServicedComponent en la GAC y lo configuro en el catálogo de COM+?
Si intenta instalar un elemento ServicedComponent en la GAC y configurarlo en el catálogo de COM+, podría recibir el error de compilación siguiente:
"Unable to build custom action named 'Primary output from RegServer (Active)' because the file's Folder property is set to Global Assembly Cache."
No se admite esta instalación, porque los ensamblados en la GAC no siempre están disponibles (se confirma a la GAC) cuando se ejecutan las acciones personalizadas.
La solución alternativa consiste en incluir el código en archivos diferentes, y el código de acción personalizada en un archivo que no vaya a la GAC, si es posible. A veces, no es posible distribuir el código de esta forma.
¿Cómo ejecuto mi programa automáticamente después de la instalación?
Cree un archivo .vbs con el código siguiente:
Set WshShell = CreateObject("WScript.Shell") WshShell.Run """" & Property("CustomActionData") & """",7,False Set WshShell = Nothing
Abra su proyecto de instalación y vaya al Editor de acciones personalizadas.
Seleccione el nodo Commit; haga clic con el botón secundario y agregue una nueva Acción personalizada.
Explore el sistema de archivos para agregar el archivo .vbs creado en el paso 1.
Edite la propiedad CustomActionData agregando lo siguiente, donde YourApp.exe es el nombre de su archivo de aplicación de inicio:
[TARGETDIR]YourApp.exe
¿Cómo creo un vínculo de desinstalación en mi acceso directo?
En el directorio de su proyecto de instalación, cree un nuevo archivo Uninstall.bat.
En su proyecto de instalación, copie la propiedad ProductCode (un valor como [12345678-1234-1234-1234-123412341234]).
Edite Uninstall.bat para que incluya una línea que contenga lo siguiente, donde ProductCode es el valor que se copió en el paso 2:
Msiexec /x ProductCode
Agregue Uninstall.bat a la carpeta de aplicación de su proyecto de instalación.
Haga clic con el botón secundario en Uninstall.bat y seleccione Crear acceso directo para crear un acceso directo.
Coloque el acceso directo en la carpeta del menú Inicio adecuada en el proyecto de instalación.
Cambie el nombre del acceso directo por algo similar a "Desinstalar <nombre de la aplicación>".
¿Dónde puedo encontrar ejemplos de cómo usar los proyectos de instalación?
Consulte Tutoriales de implementación de Windows Installer para obtener ejemplos de cómo usar los proyectos de instalación.
¿Cómo planeo la implementación de aplicaciones basadas en .NET Framework?
Esta guía proporciona la información necesaria para planear y llevar a cabo una implementación eficaz de las aplicaciones basadas en .NET Framework: Deploying .NET Framework-based Applications.
¿Dónde puedo descargar el Kit de desarrollo de software de Windows Installer?
Puede descargar el Kit de desarrollo de software de Windows Installer del sitio Web Platform SDK:
¿Dónde puedo obtener las actualizaciones y ayuda para Crystal Reports?
El software actualizado y los módulos de combinación pueden instalarse desde la página de descargas y actualizaciones del sitio web BusinessObjects.com:
http://support.businessobjects.com/fix/downloads_updates.asp
¿Dónde puedo obtener un programa previo que me ayuda a instalar .NET Framework con mi aplicación?
El programa previo de ejemplo de Setup.exe de Microsoft .NET Framework se puede encontrar en esta ubicación:
El complemento de programa previo de Visual Studio .NET Framework se puede encontrar en esta ubicación:
http://workspaces.gotdotnet.com/vsboot
¿Cómo resuelvo mensajes de error "Error irrecuperable de compilación"?
Si recibe el mensaje "Error irrecuperable de compilación" cuando genera proyectos de instalación e implementación, lea este artículo:
"PRB: 'Unrecoverable Build Error' Error Message When You Build Setup and Deployment Projects" en la dirección https://support.microsoft.com/?id=329214.
¿Cómo resuelvo mensajes de error de validación?
Si recibe mensajes de error como An error occurred when validating. HRESULT = '80040155' lea el artículo "PRB: "Unrecoverable Build Error" Error Message When You Build Setup and Deployment Projects" en la dirección https://support.microsoft.com/?id=329214 y siga los pasos de "Missing Registrations".
¿Cómo modifico IIS durante la implementación con acciones personalizadas?
En el artículo "Modifying Internet Information Services During Deployment with Custom Actions" en https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchusingcustomactionstomodifyinternetinformationserverduringdeployment.asp?frame=true se explica cómo corregir varios problemas. Entre estas estructuras se incluyen las siguientes:
Cómo modificar los parámetros de una carpeta IIS que no estén disponibles en una carpeta web del Editor del sistema de archivos
Cómo implementar una aplicación híbrida que use tanto Visual Basic 6 como Visual Basic .NET (o versiones posteriores).
Cambios en la implementación de aplicaciones de Visual Studio .NET (o posterior) con respecto a las aplicaciones de Visual Basic 6.
¿Dónde puedo encontrar información sobre implementaciones sin modificación?
Vea "Implementación sin modificación en .NET Framework" en la dirección https://msdn2.microsoft.com/es-es/library/aa289511(vs.71).aspx(vs.71).aspx.
¿Cómo implemento aplicaciones ASP.NET?
Para obtener información acerca de la implementación de una aplicación ASP.NET con Visual Studio .NET, vea Deploying an ASP.NET App Using Visual Studio .NET.
Tras la instalación en Windows 2000, la aplicación emite una advertencia de que se requiere MDAC 2.8
Cualquier aplicación que haga referencia al espacio de nombres System.Data presenta una dependencia sobre Microsoft Data Access Components (MDAC) 2.8 o versión posterior. En la mayoría de los casos, el archivo ya se encuentra instalado como parte del sistema operativo. En Windows 2000 Service Pack 3 y versiones anteriores, puede que sea necesario instalar el componente con la aplicación. Puede hacer esto agregándolo al paquete del programa previo y descargando el archivo de Microsoft durante la instalación. Para obtener más información, vea Requisitos previos de implementación (Visual Studio).
Artículos de Knowledge Base relacionados
Los siguientes artículos de Knowledge Base proporcionan información sobre problemas de implementación de Windows Installer:
"SOLUCIÓN: Un cuadro de diálogo de Windows Installer aparece cuando inicia Visual Studio .NET 2002" (313900) en la dirección https://support.microsoft.com/default.aspx?scid=kb;es-es;313900
"Esta instalación no contiene el mensaje de error de .NET Framework durante la implementación de Visual Studio .NET" (320426) en la dirección https://support.microsoft.com/default.aspx?scid=kb;es-es;320426. (Vea también http://workspaces.gotdotnet.com/vsboot para obtener información sobre el complemento de programa previo de Visual Studio .NET Framework.)
"Cómo crear accesos directos para un proyecto de implementación .NET" (307358) en la dirección https://support.microsoft.com/default.aspx?scid=kb;es-es;307358
"ERROR: Mensaje de error 'Error al instalar un controlador de ODBC' cuando se usa el módulo de combinación Vfpodbc.msm en un proyecto de instalación e implementación de Visual Studio .NET" (814700) en la dirección https://support.microsoft.com/default.aspx?scid=kb;es-es;814700
"SOLUCIÓN: Error 'No se puede generar acción personalizada' cuando se genera un proyecto de instalación" (814744) en la dirección https://support.microsoft.com/default.aspx?scid=kb;es-es;814744
"Cómo: Implementar una aplicación de Visual Basic .NET que utiliza interoperabilidad ADO" (321688) en la dirección https://support.microsoft.com/default.aspx?scid=kb;es-es;321688
"Error: Error 1619 Cuando se instala un paquete que utiliza un programa previo para web" (313498) en la dirección https://support.microsoft.com/default.aspx?scid=kb;es-es;313498
"Cómo: Implementar un ensamblado en la caché de ensamblados global del equipo de destino (GAC)" (324168) en la dirección https://support.microsoft.com/default.aspx?scid=kb;es-es;324168
Vea también
Conceptos
Alternativas de implementación