2009-03-13 9 views
8

J'ai une classe d'installation utilisant ServiceProcessInstaller. Dans la classe d'installation dans le constructeur je l'ajoute aux installateurs:ServiceProcessInstaller échoue avec "Aucun mappage entre les noms de compte et les ID de sécurité n'a été effectué"

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

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

et méthode d'installation que je mets le nom d'utilisateur et mot de passe:

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; 
} 

lorsque je tente de l'exécuter cependant, je reçois tout message d'erreur descriptif: "Aucun mappage entre les noms de compte et les ID de sécurité n'a été effectué". Qu'est-ce que je fais mal?

EDIT: J'ai testé que cette erreur se produit uniquement lorsque j'installe ce composant en utilisant le package msi. Cela fonctionne très bien quand je lance InstallUtil contre cela.

Répondre

7

Trouvé finalement: il semble y avoir une "caractéristique" dans ServiceProcessInstaller, où le code écrase les valeurs que j'ai fournies explicitement avec les valeurs du contexte. Le programme d'installation MSI a mis le nom d'utilisateur à un peu de merde (mon nom de société), et ServiceProcessInstaller a essayé d'installer le service en tant que cet utilisateur et non celui fourni explicitement par moi. Donc, la solution consiste à définir les valeurs correctes dans la config:

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

Ceci est intéressant. J'ai exactement le même problème mais l'approche ci-dessus ne fait aucune différence pour moi. J'utilise VS2010/NET4 et je me demande si MS a changé quelque chose ici - je travaille avec du code qui fonctionne sous les versions précédentes de .NET. – PeteH

+0

N'y a-t-il pas une faute de frappe - mélanger les paramètres USERNAME et PASSWORD? Ou est-ce une bizarrerie? –

+0

@NiklasRingdahl, bravo - corrigé. – Grzenio

2

Peut-être est quelque chose à voir avec votre compte de service sur votre environnement machine

Espérons que l'aide à comprendre votre situation.

+0

Désolé, vérifié cela. Le problème semble être seulement quand je l'exécute à partir du msi, il fonctionne très bien quand j'utilise InstallUtil -> donc les paramètres sont bien – Grzenio

+0

Avez-vous tous les services packs d'installation de Windows etc ... – abmv

1

J'ai eu ce problème depuis des siècles, en essayant d'exécuter un service utilisateur avec mon propre compte. Le problème s'est avéré être que je n'avais pas de mot de passe sur mon compte. Une fois que j'ai mis un mot de passe dessus a travaillé immédiatement

0

J'ai dû changer le nom d'utilisateur de user à .\user pour signifier qu'il est sur la machine locale.

Questions connexes