60 Stimmen

Anmeldeinformationen bei der Installation des Windows-Dienstes

Ich versuche, ein C#-Windows-Dienstprojekt mithilfe eines VisualStudio.Net-Bereitstellungsprojekts zu installieren.

Um das Bereitstellungsprojekt auszuführen, klicke ich mit der rechten Maustaste und wähle "Installieren" aus dem Kontextmenü. Der Installationsassistent wird ausgeführt und fordert mich schließlich mit einem Dialogfeld "Dienstanmeldung festlegen" auf, in dem ich nach Benutzernamen und Passwort gefragt werde.

Wenn ich einen Dienst mit dem Dienstprogramm sc über die Befehlszeile installiere, muss ich keine Anmeldedaten angeben.

Muss ich ein Login nur für diesen Dienst erstellen? Ich würde es vorziehen, "Lokales System" oder "Netzwerkdienst" (ich bin mir nicht sicher, was der Unterschied ist) zu verwenden, wie es andere Dienste tun.

4 Stimmen

Im ProjectInstaller Rechtsklick auf den serviceProcessInstaller => Eigenschaften Konto auf LocalSystem setzen

113voto

anthares Punkte 10719

Fügen Sie diesen Code in Ihre private void ein InitializeComponent() Methode in projectInstaller.Designer.cs Datei in Ihrem Windows-Dienstprojekt.

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

wenn die Definition Ihres Prozesses Installateur ist:

private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;

1 Stimmen

Genau das habe ich gebraucht. Danke!

0 Stimmen

@anthares Ich muss den Dienst als aktueller Benutzer ausführen, wie kann ich das beheben? Ich verwende: ServiceAccount.User, erhalte aber die Passwortabfrage bei der Installation...

4 Stimmen

Da sich die Codestelle dafür im vom Designer generierten Code befindet, habe ich einfach dasselbe getan, indem ich den Designer geöffnet, die Eigenschaften des serviceProcessInstaller1-Objekts abgerufen und dann LocalSystem in der Dropdown-Liste für Account ausgewählt habe.

24voto

David Punkte 1596

Prüfen Sie diesen Link: http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx

Achten Sie auf diesen Abschnitt: So erstellen Sie die Installationsprogramme für Ihren Dienst

Nehmen Sie Änderungen an Ihrem ServiceProcessInstaller vor:

Klicken Sie im Designer auf ServiceProcessInstaller1 für ein Visual Basic-Projekt, oder serviceProcessInstaller1 für ein Visual C#-Projekt. Setzen Sie die Eigenschaft Konto auf LocalSystem. Dies bewirkt, dass der Dienst installiert und unter einem lokalen Dienstkonto ausgeführt wird.

1 Stimmen

Dies hat Vorrang vor der Einstellung über Code in der Datei projectInstaller.Designer.cs.

4voto

fre0n Punkte 1825

Fügen Sie in dem Projekt, das den Dienst enthält, eine Installer-Klasse hinzu. Sie sollte in etwa so aussehen:

[RunInstaller(true)]
public class MyServiceInstaller : Installer
{
    public MyServiceInstaller()
    {
        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
        serviceProcessInstaller.Account = ServiceAccount.LocalSystem; // Or whatever account you want

        var serviceInstaller = new ServiceInstaller
        {
            DisplayName = "Insert the display name here",
            StartType = ServiceStartMode.Automatic, // Or whatever startup type you want
            Description = "Insert a description for your service here",
            ServiceName = "Insert the service name here"
        };

        Installers.Add(_serviceProcessInstaller);
        Installers.Add(serviceInstaller);
    }

    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);

        // This will automatically start your service upon completion of the installation.
        try
        {
            var serviceController = new ServiceController("Insert the service name here");
            serviceController.Start();
        }
        catch
        {
            MessageBox.Show(
                "Insert a message stating that the service couldn't be started, and that the user will have to do it manually");
        }
    }
}

Klicken Sie dann im Projektmappen-Explorer mit der rechten Maustaste auf das Bereitstellungsprojekt und wählen Sie "Ansicht > Benutzerdefinierte Aktionen". Klicken Sie mit der rechten Maustaste auf "Benutzerdefinierte Aktionen" und wählen Sie "Benutzerdefinierte Aktion hinzufügen...". Wählen Sie den Anwendungsordner und wählen Sie die primäre Ausgabe des Projekts, das den Dienst enthält. Nun werden die benutzerdefinierten Aktionen ( Commit von oben) wird bei der Installation ausgeführt. Sie können die zusätzlichen Methoden ( Install , Rollback , Uninstall ), wenn Sie andere benutzerdefinierte Aktionen benötigen.

0 Stimmen

Ich verstehe das nicht? Wie soll ihm das helfen, wenn er das Systemkonto als Ausführenden des Dienstes festlegt?

0 Stimmen

Das habe ich davon, wenn ich Code aus meinem Projekt kopiere. (Facepalm) In der Install Methode des Installationsprogramms meines Projekts habe ich die Eigenschaft "Account" festgelegt. Das ist jetzt behoben...

4voto

Adam Cooper Punkte 7086
  1. Öffnen Sie Ihr ProjectInstaller
  2. Klicken Sie mit der rechten Maustaste auf den ServiceProcessInstaller und wählen Sie Eigenschaften
  3. Wählen Sie in der Dropdown-Liste Konto unter Verschiedenes das Konto aus, unter dem Ihr Dienst laufen soll

Einzelheiten zu den verschiedenen Konten und ihren Berechtigungen finden Sie unter dem folgenden Link:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx

1 Stimmen

Ich kann das Dropdown-Menü "Konto" unter "Verschiedenes" nicht sehen, VS 2010

1 Stimmen

Er meinte ServiceProcessInstaller, nicht ProcessInstaller.

0voto

Iván Kollár Punkte 29

Am einfachsten ist es, wenn Sie auf Ihren serviceProjectInstaller klicken und ihn im Eigenschaften-Fenster einstellen.

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X