2009-03-13 10 views
8

Tengo una clase de instalador que usa ServiceProcessInstaller. En la clase de instalación en el constructor lo añado a los instaladores:ServiceProcessInstaller falla con "No se realizó la asignación entre los nombres de cuenta y los ID de seguridad"

serviceProcessInstaller = new ServiceProcessInstaller(); 
serviceInstaller = new ServiceInstaller(); 

// Add Both Installers to Project Installers Collection to be Run 
Installers.AddRange(new Installer[] 
           { 
            serviceProcessInstaller, 
            serviceInstaller 
           }); 

y en el método de instalación puse el nombre de usuario y contraseña:

public override void Install(IDictionary stateSaver) 
{ 
    .... open the form, bla bla bla 
    serviceProcessInstaller.Password = accountForm.txtPassword.Text; 
    serviceProcessInstaller.Username = accountForm.txtServiceAccount.Text; 
    serviceProcessInstaller.Account = ServiceAccount.User; 
} 

cuando intento ejecutarlo sin embargo, tengo la muy mensaje de error descriptivo: "No se realizó la asignación entre los nombres de cuenta y las identificaciones de seguridad". ¿Qué estoy haciendo mal?

EDIT: Comprobé que este error solo ocurre cuando instalo este componente usando el paquete msi. Funciona muy bien cuando ejecuto InstallUtil contra él.

Respuesta

7

Encontrado finalmente: parece que hay una "característica" en ServiceProcessInstaller, donde el código sobrescribe los valores que proporcioné explícitamente con los valores del contexto. El instalador de MSI configuró el nombre de usuario como basura (el nombre de mi compañía) y ServiceProcessInstaller intenté instalar el servicio como este usuario y no como el proporcionado explícitamente por mí. Así que la solución consiste en establecer los valores correctos en la configuración:

public override void Install(IDictionary stateSaver) 
{ 
    .... open the form, bla bla bla 
    serviceProcessInstaller.Password = accountForm.txtPassword.Text; 
    Context.Parameters["PASSWORD"] = accountForm.txtPassword.Text; 
    serviceProcessInstaller.Username = accountForm.txtServiceAccount.Text; 
    Context.Parameters["USERNAME"] = accountForm.txtServiceAccount.Text; 
    serviceProcessInstaller.Account = ServiceAccount.User; 
} 
+0

Esto es interesante. Tengo exactamente el mismo problema, pero el enfoque anterior no me importa. Estoy usando VS2010/NET4 y me pregunto si MS ha cambiado algo aquí. Estoy trabajando con código que funcionaba con versiones anteriores de .NET. – PeteH

+0

¿No hay ningún error aquí, mezclando los parámetros USERNAME y PASSWORD? ¿O es un capricho? –

+0

@NiklasRingdahl, aplausos - corregidos. – Grzenio

2
+0

Disculpe, lo comprobé. El problema parece ser solo cuando lo ejecuto desde el msi, funciona bien cuando uso InstallUtil -> entonces los parámetros están bien – Grzenio

+0

¿Tiene todos los paquetes de servicios de instalación de Windows, etc ... – abmv

1

he tenido este problema durante mucho tiempo, tratando de ejecutar un servicio de usuario con mi propia cuenta. El problema resultó ser que no tenía contraseña en mi cuenta. Una vez que puse una contraseña, funcionó de inmediato

0

Tuve que cambiar el nombre de usuario de user a .\user para indicar que está en la máquina local.

Cuestiones relacionadas