ServiceProcessInstaller завершается с ошибкой «Не сделано сопоставление между именами учетных записей и идентификаторами безопасности» - PullRequest
8 голосов
/ 13 марта 2009

У меня есть класс установщика, использующий ServiceProcessInstaller. В классе установщика в конструкторе я добавляю его в установщики:

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

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

и в методе установки я устанавливаю имя пользователя и пароль:

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

однако, когда я пытаюсь запустить его, я получаю очень описательное сообщение об ошибке: «Не было сопоставления между именами учетных записей и идентификаторами безопасности». Что я делаю не так?

РЕДАКТИРОВАТЬ: я проверял, что эта ошибка происходит только при установке этого компонента с использованием пакета MSI. Он отлично работает, когда я запускаю InstallUtil против него.

Ответы [ 4 ]

7 голосов
/ 16 марта 2009

Наконец-то нашел: в 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;
}
2 голосов
/ 16 марта 2009

Возможно, это как-то связано с вашей служебной учетной записью на вашей машинной среде

Надеюсь, что помощь поможет понять вашу ситуацию.

1 голос
/ 01 ноября 2012

У меня была эта проблема целую вечность, когда я пытался запустить службу пользователя со своей учетной записью Проблема оказалась в том, что у меня не было пароля на моей учетной записи. Как только я поставил пароль, он сразу заработал

0 голосов
/ 14 ноября 2016

Мне пришлось изменить имя пользователя с user на .\user, чтобы указать, что оно находится на локальной машине.

...