2012-05-03 26 views
15

Creé un servicio de ventana y para instalarlo creé su proyecto de implementación e instalé eso. Después de la instalación, lo miré. Comenzó con éxito.al instalar el servicio de ventana System.Security.SecurityException

Al día siguiente hice algunas modificaciones, reconstruí y reinstalé pero ahora no se está instalando.

Luego pensé que era un problema con el instalador, permite crear un instalador personalizado para el servicio para que siempre que pueda actualizar mi código.

Lo creé así en caso de que alguien necesite esto para el futuro.

public class MyInstaller : Installer 
    { 
     ServiceProcessInstaller spi; 
     ServiceInstaller si; 
     public MyInstaller() 
     {    
      spi = new ServiceProcessInstaller(); 
      spi.Account = ServiceAccount.LocalSystem; 

      si = new ServiceInstaller(); 
      si.StartType = ServiceStartMode.Manual; 
      si.ServiceName = "MyService"; 
      si.DisplayName = "My Service"; 
      si.Description = "service installed from command line"; 

      this.Installers.Add(spi); 
      this.Installers.Add(si); 

     } 
} 

Lo llamé desde el método principal mediante la comprobación del parámetro args.

      case "-i": 
          case "-install": 
           ti = new TransactedInstaller(); 
           mi = new MyInstaller(); 
           ti.Installers.Add(mi); 
           string logPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\install.log"; 
           ctx = new InstallContext(logPath, cmdline); 
           ti.Context = ctx; //.Context (ctx); 
           ti.Install(new Hashtable()); 
           break; 

Ahora cuando intento instalarlo. Recibí el error System.Security.SecurityException: no se encontró el origen, pero algunos o todos los registros de eventos no se pudieron buscar. Registros inaccesibles: seguridad.

Lo busco en google, y me doy cuenta de que el servicio intentará acceder al registro de la aplicación mientras instala y escribe allí.

No estoy escribiendo ningún registro de eventos. Tengo mi log4net para iniciar sesión. Pero aún así su comportamiento predeterminado.

¿Cómo superar este problema ahora? No se está instalando incluso tengo todos los permisos.

Gracias

Respuesta

56

he encontrado que a veces puede que tenga que "Ejecutar como administrador". Si está instalando desde un símbolo del sistema, es posible que deba iniciar con con "Ejecutar como administrador".

+0

Lo hice usando cntrl + shift + enter in run.Entonces, de nuevo, hice clic derecho y me puse a funcionar como administrador y funcionó el hombre. gracias qué tontos errores estoy haciendo. pero me gustaría saber cómo mejorar el rendimiento de inicio/detención del servicio de ventanas. – sunder

+0

@sunder: el rendimiento de inicio/detención tendrá un * lote * que ver con lo que está haciendo su servicio. 'Inicio' debería estar bien, ya que normalmente harías girar un nuevo hilo que hace el trabajo. Para detenerlo, necesitaría una forma rápida de detener lo que está haciendo el hilo. Entonces, no hay una manera genérica de mejorar el rendimiento. –

+0

Creé un archivo por lotes (.BAT) para instalar el servicio y estaba ejecutando el lote como administrador, pero no funcionaba. Luego, ejecuto el símbolo del sistema como administrador e instalé el servicio sin el archivo BAT, simplemente escribiendo el nombre del archivo EXE -install. No estoy seguro de por qué sucedió esto, pero tal vez podría ayudar a otros. Creo que podría estar relacionado con el hecho de que ejecutar un archivo BAT como administrador no está ejecutando el código que escribes allí como administrador, solo el archivo BAT. –

1

Pude haber tenido una causa raíz separada para el mensaje, pero lo solucioné cambiando mi servicio para que se ejecute como LocalSystem (que es lo que quiero de todos modos) en lugar de LocalService.

0

puedo confirmar que en "Windows 7 64 bits" y "Windows 10" se debe:

1) ejecutar símbolo del sistema de Visual Studio como administrador (clic derecho .. Otros .. tun como administrador)

enter image description here

2) vaya a la carpeta "obj" donde tiene el exe. (cd [todas las rutas a \ obj]) 3) iniciar installutil [myservice.exe]

si no se ejecuta como "admin", falla incluso en el viejo win7. :(

nota: MSDN no explicarlo:

(en: https://docs.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer)

"para instalar un servicio de Windows, debe tener credenciales administrativas en el equipo en el que va a instalar la misma."

:)

Cuestiones relacionadas