2009-10-16 14 views
31

Estoy intentando implementar un servicio que escribí. Aquí está el archivo InstallLog:Instalación de un servicio de Windows de desarrollo propio

Installing assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'. 
Affected parameters are: 
    logtoconsole = 
    assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe 
    logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog 
Installing service TweetLinkService... 
Creating EventLog source TweetLinkService in log Application... 
Rolling back assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'. 
Affected parameters are: 
    logtoconsole = 
    assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe 
    logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog 
Restoring event log to previous state for source TweetLinkService. 
An exception occurred during the Rollback phase of the System.Diagnostics.EventLogInstaller installer. 
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security. 
An exception occurred during the Rollback phase of the installation. This exception will be ignored and the rollback will continue. However, the machine might not fully revert to its initial state after the rollback is complete. 

Como puede ver, no está funcionando. No estoy seguro de cómo proceder, y he golpeado la pared con Bing y Google. Establecí la Cuenta en LocalSystem para el serviceProcessInstaller1. El código compila bien, pero ahora me gustaría ejecutarlo ... ¿Alguna idea? Soy un administrador en mi caja, y yo estoy corriendo el comando:

InstallUtil TweetLinkQueue.exe

desde la consola de administración VS2008.

actualizado con la opción/ShowCallStack

Pila de llamadas

An exception occurred during the Install phase. 
System.Security.SecurityException: The source was not found, but some or all eve 
nt logs could not be searched. Inaccessible logs: Security. 
    at System.Diagnostics.EventLog.FindSourceRegistration(String source, String m 
achineName, Boolean readOnly) 
    at System.Diagnostics.EventLog.SourceExists(String source, String machineName 
) 
    at System.Diagnostics.EventLogInstaller.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.ServiceProcess.ServiceInstaller.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.AssemblyInstaller.Install(IDictionary savedSt 
ate) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.TransactedInstaller.Install(IDictionary saved 
State) 

y aquí está el constructor:

public TweetLinkService() 
{ 
    InitializeComponent(); 

    if (!EventLog.SourceExists("TweetLinkQueue")) 
    { 
     EventLog.CreateEventSource("TweetLinkQueue", "Log"); 

     TweetLinksLog.Source = "TweetLinkQueue"; 
     TweetLinksLog.Log = "Log"; 

     TweetLinksLog.WriteEntry("Log Created!"); 
    } 
} 

actualiza con el punto de entrada:

namespace TweetLinkQueue 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     static void Main() 
     { 
      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] 
      { 
       new TweetLinkService() 
      }; 
      ServiceBase.Run(ServicesToRun); 
     } 
    } 
} 
+0

¿Obtiene información adicional si ejecuta installutil con la opción/ShowCallStack? – itowlson

+0

La información del archivo de registro está en la pregunta anterior. –

+0

¿El usuario con el que intenta instalar el servicio tiene permisos para escribir en el registro de eventos de seguridad? – Oded

Respuesta

13

estoy no Seguro cuál es tu problema específico. Me parece que el problema se produce al crear la fuente EventLog. Verifique nuevamente que haya hecho esa parte correctamente. Puede consultar el paso a paso here. EDITAR: MIRAR ESPECÍFICAMENTE EN EL PASO 9. El problema puede estar ocurriendo porque está jugando con el registro de la aplicación en lugar de uno específico para su aplicación.

No hay nada malo con el uso de InstallUtil, pero si necesita instalar su servicio en una máquina extranjera, no se garantiza que InstallUtil esté allí. Puede seguir este paso paso a paso para hacer que el servicio ejecutable de Windows se instale/desinstale sin la necesidad de InstallUtil. Vea here para esas instrucciones.

2

La cuenta LocalSystem normalmente no tiene permiso para leer el registro de eventos de seguridad (o para crear orígenes de eventos para el caso).

La solución más fácil y segura es crear un programa de instalación de origen de eventos que pueda ejecutar con sus propias credenciales de nivel de administración en cualquier máquina para la que desee ejecutar esto. Incluso podría valer la pena probar esto como una prueba simple, solo para ver si su cuenta tiene permiso para hacerlo.

class Program { 
    static void Main(string[] args) { 
     EventLog.CreateEventSource("TestSource", "Application"); 
    } 
} 

Si ejecuta eso, ¿lo consigue? Puede verificarlo mirando las propiedades del registro de la Aplicación y navegando por las fuentes del Evento en su pestaña Filtro.

alternativa, ya que los servicios tienen que ser instalados de todos modos, se podría añadir una EventLogInstaller (que es mal llamado - es realmente un 'EventSourceInstaller' que creará EventLogs según sea necesario) al conjunto en lugar de utilizar EventLog.CreateEventSource en el constructor del servicio.

+0

Sí. Consulte el código siguiente al paso 9 en http://stackoverflow.com/questions/593454/easiest-language-to-create-a-windows-service/593803#593803 para ver un ejemplo de cómo hacer esto. –

+0

Sí, definitivamente es un buen ejemplo. –

109

Solo estaba teniendo este problema y era porque no estaba ejecutando el símbolo del sistema de Visual Studio como administrador.

+8

Esto debe marcarse como la respuesta. –

+0

esto explica por qué funcionó en mi máquina pero no en la producción – TruthOf42

+2

Creé un archivo BAT para instalar el servicio y estaba ejecutando el archivo BAT como administrador (haga clic derecho en el archivo BAT y haga clic en "ejecutar como administrador") pero no estaba funcionando. Para que funcione, "ejecuto como administrador" un comando de línea de comando (cmd.exe) en lugar del archivo BAT. Luego, lo instalé manualmente y funcionó. –

8

Para resolver este problema, haga clic derecho en su Símbolo del sistema de Visual Studio 2008 y haga clic en ejecutar como administrador y ejecute el comando como installutil C: \ mcWebService \ bin \ Debug \ mcWebService.exe luego le mostrará un mensaje exitoso. Espero que esto solucione su solución.

0

Mi problema era una ventana que estaba apareciendo para ingresar credenciales y estaba ingresando mi nombre de usuario sin el dominio. Una vez que ingresé dominio \ nombre de usuario todo estaba bien.

Cuestiones relacionadas