visual studio setup servicio instalador for create crear visual-studio windows-services installer

visual studio - studio - ¿Cómo elimino "El servicio especificado ya existe" cuando instalo nuevas versiones de mi software?



windows service visual studio 2015 (5)

Asegúrese de que la versión de ensamblaje del servicio y el GUID (en AssemblyInfo.vb / cs) se cambian cuando implementa cada paquete de instalador nuevo. Si detecta la misma versión, las actualizaciones fallan.

Tengo una aplicación VS2008 que incluye un proyecto de servicio (lo llamaré Proyecto de servicio). Tengo el proyecto de instalación (InstallationProject) configurado para RemovePreviousVersions. Además, tengo acciones personalizadas establecidas para InstallationProject, Install, Commit, Rollback y Desinstalar la salida primaria de ServiceProject.

A veces, cuando construyo nuevas versiones del instalador, puedo instalar sin un error. A menudo, cuando llego al punto de configurar el servicio (ingresando un nombre de usuario y contraseña en el instalador), falla con el error "El servicio especificado ya existe" .

No sé por qué es inconsistente, aunque he considerado que tal vez haya algún tipo de firma para el servicio y si el servicio no está modificado, puede eliminarlo con éxito, pero con modificaciones, no reconoce el Servicio. Sin embargo, rara vez hago modificaciones al servicio, así que dudo que sea eso.

¿Cómo puedo hacer que mi instalador actualice correctamente el servicio sin este error? Mi solución es ingresar manualmente en el Panel de control, desinstalar la aplicación anterior y luego ejecutar el instalador.


Ponga "No (instalado o PREVIOUSVERSIONSINSTALLED)" en la propiedad Acciones personalizadas-> Instalar la condición.


Algo que puede ayudar, pero que no se mencionó en ninguna de las anteriores, está relacionado con la respuesta de Ryan. Me pasó el mismo problema hasta que hice esto: abra el .msi en Orca y ubique la tabla de actualización. Donde está la línea instalada en la versión anterior (fue la primera entrada en el mío), debería ver un código de actualización. Encuentre el .msi del programa que está actualmente instalado (el que desea actualizar), encuentre el código de actualización (que puede hacer en orca) y cópielo y péguelo en la tabla de actualización para su nuevo .msi. Esto hizo el truco para mí.


Pruebe este código en su clase de instalador. Espero que resolverá tu problema.

protected override void OnBeforeInstall(IDictionary savedState) { if (LaunchOnBeforeInstall()) { base.OnBeforeInstall(savedState); } else { throw new Exception("You cancelled installation"); } } public bool LaunchOnBeforeInstall() { Form2 frm2 = new Form2(); DialogResult result = frm2.ShowDialog(); if (result == DialogResult.Cancel) { return false; } else { return true; } }

Y también puso "NOTPREVIOUSVERSIONSINSTALLED"


Además de asegurarse de que las versiones de los archivos sean diferentes como mencionó StingyJack, usted tiene otro problema. De la documentación VS (lo siento, no en línea)

Si ha configurado tanto la instalación como la desinstalación de acciones personalizadas en el proyecto de instalación de una aplicación, y ha habilitado la propiedad RemovePreviousVersions en Visual Studio 2005, la versión anterior del producto se desinstala durante una actualización. Sin embargo, este comportamiento cambió en Visual Studio 2008 de la siguiente manera:

En Visual Studio 2005, las acciones personalizadas se llamaron de la siguiente manera en una actualización de v1.0.0 a v1.0.1:

v1.0.0 acción personalizada Desinstalar ()

v1.0.1 acción personalizada Install ()

En Visual Studio 2008, la acción de desinstalación no se llama, de la siguiente manera:

v1.0.1 acción personalizada Install ()

Si creó acciones personalizadas basándose en el comportamiento anterior, debe modificar su código para el nuevo comportamiento. Este cambio de comportamiento afecta solo a las actualizaciones, no a las desinstalaciones.

Por lo tanto, está instalando un servicio mediante una acción personalizada, pero cuando actualiza la pieza de desinstalación no se está llamando como espera e intenta instalar sobre una versión existente que se está ejecutando.

Creo que cuando está pidiendo un reinicio es porque no puede actualizar el archivo de servicios mientras se está ejecutando.

Dos opciones :-

Agregue código a la acción personalizada Instalar / Confirmar para Detener el servicio, espere a que el instalador reemplace los archivos de servicios y luego reinicie el servicio. Ver la respuesta de PonalSuper3 en este hilo

Vuelva a establecer el comportamiento de VS2008 en cómo funcionaba en VS2005 (se llama a las versiones anteriores Desinstalar acción personalizada antes de la nueva versión Instalar) usando Orca para alterar InstallExecuteSequence.RemoveExistingProducts inmediatamente después .InstallInitialize: generalmente establece .RemoveExistingProducts en 1525 pero revisa tu MSI individual.

Agregué un script que puede agregar a su proceso de compilación para cambiar InstallExecuteSequence de MSI