ServiceProcessInstaller失败,“帐户名和安全ID之间没有映射已完成”

时间:2009-03-13 15:37:39

标签: c# .net web-services installer

我有一个使用ServiceProcessInstaller的安装程序类。在构造函数的installer类中,我将它添加到安装程序:

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

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

并在Install方法中设置用户名和密码:

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

当我尝试运行它时,我得到了描述性错误消息:“帐户名和安全ID之间没有映射”。我做错了什么?

编辑:我测试过只有在使用msi软件包安装此组件时才会发生此错误。当我对它运行InstallUtil时,它工作得很好。

4 个答案:

答案 0 :(得分:7)

最终找到它:ServiceProcessInstaller中似乎有一个“功能”,其中代码用上下文中的值覆盖我明确提供的值。 MSI安装程序将用户名设置为某个废话(我公司名称),ServiceProcessInstaller尝试以此用户身份安装服务,而不是我明确提供的服务。因此,解决方法是在配置中设置正确的值:

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

答案 1 :(得分:2)

答案 2 :(得分:1)

我有这个问题很久了,试图用自己的帐户运行用户服务。问题是我的帐户上没有密码。一旦我输入密码就可以立即使用

答案 3 :(得分:0)

我必须将用户名从user更改为.\user,以表示它位于本地计算机上。