当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《ServiceProcessInstaller失败,"帐户名和安全ID之间没有映射已完成"》经验,为你挑选了1个好方法。

我有一个安装程序类使用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时,它工作得很好.



1> Grzenio..:

最后找到它:似乎有一个"功能" 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;
}

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有