我有一个使用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时,它工作得很好。
答案 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
,以表示它位于本地计算机上。