Utilisation de InstallUtil et définition silencieuse d'un nom d'utilisateur / mot de passe de connexion au service Windows

StackOverflow https://stackoverflow.com/questions/140054

Question

Je dois utiliser InstallUtil pour installer un service Windows C #. Je dois définir les informations d'identification de connexion au service (nom d'utilisateur et mot de passe). Tout cela doit être fait en silence.

Existe-t-il un moyen de faire quelque chose comme ceci:

installutil.exe myservice.exe /customarg1=username /customarg2=password
Était-ce utile?

La solution 2

Bravo à mon collègue (Bruce Eddy). Il a trouvé un moyen de passer cet appel de ligne de commande:

installutil.exe /user=uname /password=pw myservice.exe

Cela se fait en remplaçant OnBeforeInstall dans la classe du programme d'installation:

namespace Test
{
    [RunInstaller(true)]
    public class TestInstaller : Installer
    {
        private ServiceInstaller serviceInstaller;
        private ServiceProcessInstaller serviceProcessInstaller;

        public OregonDatabaseWinServiceInstaller()
        {
            serviceInstaller = new ServiceInstaller();
            serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
            serviceInstaller.ServiceName = "Test";
            serviceInstaller.DisplayName = "Test Service";
            serviceInstaller.Description = "Test";
            serviceInstaller.StartType = ServiceStartMode.Automatic;
            Installers.Add(serviceInstaller);

            serviceProcessInstaller = new ServiceProcessInstaller();
            serviceProcessInstaller.Account = ServiceAccount.User; 
            Installers.Add(serviceProcessInstaller);
        }

        public string GetContextParameter(string key)
        {
            string sValue = "";
            try
            {
                sValue = this.Context.Parameters[key].ToString();
            }
            catch
            {
                sValue = "";
            }
            return sValue;
        }


        // Override the 'OnBeforeInstall' method.
        protected override void OnBeforeInstall(IDictionary savedState)
        {
            base.OnBeforeInstall(savedState);

            string username = GetContextParameter("user").Trim();
            string password = GetContextParameter("password").Trim();

            if (username != "")
                serviceProcessInstaller.Username = username;
            if (password != "")
                serviceProcessInstaller.Password = password;
        }
    }
}

Autres conseils

Une méthode beaucoup plus simple que les publications ci-dessus et sans code supplémentaire dans votre programme d'installation consiste à utiliser les éléments suivants:

  

installUtil.exe / nom d'utilisateur = domaine \ nom d'utilisateur / mot de passe = mot de passe / C: \ My.exe sans assistance

Assurez-vous que le compte que vous utilisez est valide. Sinon, vous recevrez un message "Aucun mappage entre les noms de compte et les identifiants de sécurité n'a été effectué". exception

InstallUtil.exe définit StartupType = Manual

Si vous souhaitez démarrer automatiquement le service, utilisez:

sc config MyServiceName start = auto

(notez qu'il doit y avoir un espace après '=')

Non, installutil ne prend pas cela en charge.

Bien sûr, si vous avez écrit un programme d’installation; avec un personnalisé action , vous pourrez l'utiliser dans le cadre d'un MSI ou via installutil.

Vous pouvez également forcer votre service à s'exécuter en tant qu'utilisateur à l'aide de ServiceProcessInstaller :: Account = ServiceAccount.User ;

Un popup demandant "domaine [] \ utilisateur, mot de passe" apparaîtra lors de l’installation du service.

public class MyServiceInstaller : Installer
{
    /// Public Constructor for WindowsServiceInstaller
    public MyServiceInstaller()
    {
        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
        ServiceInstaller serviceInstaller = new ServiceInstaller();

        //# Service Account Information
        serviceProcessInstaller.Account = ServiceAccount.User; // and not LocalSystem;
     ....
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top