Frage

Ich versuche, einen von mir geschriebenen .NET-Dienst zu installieren.Wie von MSDN empfohlen, verwende ich InstallUtil.Aber ich habe übersehen, wie ich den Standarddienstbenutzer in der Befehlszeile oder sogar im Dienst selbst festlegen kann.Wenn InstallUtil nun ausgeführt wird, wird ein Dialogfeld angezeigt, in dem der Benutzer nach den Anmeldeinformationen eines Benutzers gefragt wird.Ich versuche, die Dienstinstallation in eine größere Installation zu integrieren und möchte, dass die Dienstinstallation stumm bleibt.

War es hilfreich?

Lösung

Ich glaube, ich habe es vielleicht gefunden.Im Dienst selbst verfügt die automatisch erstellte ServiceProcessInstaller-Komponente über eine Eigenschaft „Account“, die auf „LocalService“, „LocalSystem“, „NetworkService“ oder „User“ gesetzt werden kann.Die Standardeinstellung war „Benutzer“, was die Eingabeaufforderung angezeigt haben muss.

Andere Tipps

Wie Sie bemerkt haben, Karim, ist die Eigenschaft „Konto“ hier die Lösung.Für diejenigen, die sich für Unterschiede zwischen den durch diese Eigenschaft festgelegten Sicherheitskontexten interessieren:

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

Vor der Verwendung von InstallUtil oder SC gefällt mir die Idee, ein zu erstellen SELBSTINSTALLATEUR:

http://www.codeproject.com/KB/dotnet/WinSvcSelfInstaller.aspx

obwohl ich dies in der .Net 1.1-Dokumentation gefunden habe:

Der ManagedInstallerClass Art unterstützt .NET Framework Infrastruktur und ist nicht dazu bestimmt, direkt aus Ihrem Code heraus verwendet werden.

Denken Sie auch daran SC.exe-Dienstprogramm für die keine Installation von Visual Studio erforderlich ist.Sie können diese Exe einfach auf den Server kopieren, auf dem Sie den Dienst erstellen möchten oder sogar Führen Sie es aus der Ferne aus.Benutzen Sie die obj Parameter zur Angabe eines Benutzers.

Anscheinend gibt es für dieses Tool eine GUI, die ich aber nicht genutzt habe.

Werden Sie nach dem Konto gefragt, unter dem der Dienst ausgeführt werden soll, oder nach Rechten zur Installation des Dienstes?Zweitens sollte die Installation als Administrator dies verhindern.Zunächst müssen Sie Ihrem Installer einen ServiceProcessInstaller hinzufügen.

Ich glaube, dass die Designoberfläche für einen Dienst einen Link zum Erstellen eines Projektinstallationsprogramms enthält.In diesem Designer können Sie ein Prozessinstallationsprogramm vom Typ System.ServiceProcess.ServiceProcessInstaller hinzufügen.Mit den Eigenschaften dieses Objekts können Sie das Konto festlegen, das für den Dienst verwendet werden soll.

InstallUtil verfügt über Befehlszeilenschalter, die die Eingabeaufforderungen vermeiden können, wenn „Benutzer“ als Kontotyp verwendet wird. /username Und /password werden verwendet, um das Konto bei der Installation zu konfigurieren.

Verwendung:

installutil.exe /username=user /password=password yourservice.exe

Möglicherweise möchten Sie eine Konfigurationsdatei haben, in der das Installationsprogramm den Dienst lesen und installieren kann.

Fügen Sie dazu Ihrem Projekt ein Dienstinstallationsprogramm hinzu und überladen Sie die Installationsmethode.Legen Sie bei dieser Methode den Benutzernamen und das Passwort fest:

public override void Install(IDictionary stateSaver)
{
    serviceProcessInstaller1.Username="<username>";
    serviceProcessInstaller1.Password="<password>";
    base.Install(stateSaver);
}

Wenn Sie versuchen, den Benutzernamen und das Passwort im Konstruktor festzulegen, werden diese Werte überschrieben. Stellen Sie daher sicher, dass Sie „Installieren“ überschreiben, um dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top