Frage

Ich brauche InstallUtil zu verwenden, um einen C # Windows-Dienst zu installieren. Ich brauche die Service-Anmeldeinformationen (Benutzername und Kennwort) ein. All dies muss im Stillen getan werden.

Ist es Art und Weise, so etwas zu tun:

installutil.exe myservice.exe /customarg1=username /customarg2=password
War es hilfreich?

Lösung 2

Bravo auf meine Mitarbeiter (Bruce Eddy). Er fand einen Weg wir diese Befehlszeilen Anruf tätigen können:

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

Es erfolgt durch OnBeforeInstall im Installer Klasse überschreiben:

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

Andere Tipps

Eine viel einfachere Weise, als die Pfosten oben und ohne zusätzlichen Code in Ihrem Installateur ist folgendes zu verwenden:

  

installutil.exe / username = domain \ Benutzername / Passwort = Passwort / unbeaufsichtigt C: \ My.exe

Einfach sicher, das Konto gültig verwenden ist. Wenn nicht erhalten Sie eine „Zuordnungen von Kontennamen und Sicherheits IDs wurde getan“ Ausnahme

InstallUtil.exe setzt Startuptype = Manuell

Falls Sie den Dienst automatisch zu starten, verwenden Sie:

sc config MyServiceName start= auto

(Anmerkung dort hat es einen Raum sein, nachdem '=')

Nein, installutil nicht, dass unterstützen.

Natürlich, wenn Sie ein Installationsprogramm geschrieben; mit einem benutzerdefinierten Aktion dann würden Sie in der Lage sein, die ein MSI oder über installutil als Teil zu verwenden.

Sie können auch Ihren Dienst zwingen als Benutzer ausgeführt werden unter Verwendung von Serviceprocess :: Account = ServiceAccount.User ,

Ein Popup-Frage "[Domäne \] Benutzer, Passwort" während des Betriebs Installation angezeigt wird.

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;
     ....
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top