0

ich einen Windows-Dienst, die ich msiexec.exe mit stillen Installation und ich bin das Bestehen der Benutzername und das Passwort für den „Set Service Login“Benutzerdefinierte Aktionen Installer für Windows Service

Der Dienst erfolgreich installiert, aber beim Starten des Dienst, den ich erhalte "Fehler 1069: Der Dienst hat aufgrund von Anmeldeproblemen nicht gestartet" Mein Anmeldekonto ist Administrator und ich habe getestet, dass wenn ich manuell die gleiche MSI-Datei installiere und den Dienst starte, es erfolgreich gestartet wird, stecke ich fest brauche einige Ideen und Anleitung von dem, was ich vermisse.

Hier ist meine überschriebene Methode von Installer-Klasse.

public override void Install(IDictionary stateSaver) 
    { 
     base.Install(stateSaver); 

     var userName = Context.Parameters["USERNAME"]; 
     var password = Context.Parameters["PASSWORD"]; 
     if (!string.IsNullOrWhiteSpace(userName) && userName.ToLower() != "admin") 
     { 
      CustomInstallerParameters customParameters = new CustomInstallerParameters(Context); 

      SaveCustomParametersInStateSaverDictionary(stateSaver, customParameters); 
     } 
     else 
     { 
      Context.Parameters.Remove("USERNAME"); 
      Context.Parameters.Remove("PASSWORD"); 
     } 
    } 

TIA.

Antwort

0

Höchstwahrscheinlich anderes Jahrzehnt, die gleiche Problem .... (SeServiceLogonRight)

http://iswix.com/2008/09/22/different-year-same-problem/

FWIW, ich war kein großer WiX Benutzer noch damals (ich nur an diesem Punkt Dilettantismus) aber in den Kommentaren meines Matthew Rowan gibt es einige echte Edelsteine. Er ist richtig ... all das wird viel einfacher, wenn Sie WiX verwenden.

Zum Beispiel können Sie dieses Tutorial folgen:

https://github.com/iswix-llc/iswix-tutorials

Dies schafft einen Windows-Dienst als SYSTEM ausgeführt wird. Fügen Sie einen Verweis auf die WiXUtil-Erweiterung und den Namespace hinzu, und erstellen Sie ein Benutzerelement mit der Berechtigung "LogonAsService", die alle gesetzt ist.

FWIW, meine einzige Sorge mit all dem ist, dass MSI Eigenschaft Persistenz benötigt, wenn Sie nicht wollen, dass eine Reparatur vorbeikommt und den Benutzernamen und das Passwort beschädigt. Eigenschaftenpersistenz ist ziemlich einfach zu merken (Siehe: http://robmensching.com/blog/posts/2010/5/2/the-wix-toolsets-remember-property-pattern/), aber das Problem besteht darin, genügend Verschlüsselung bereitzustellen, um das Konto nicht verfügbar zu machen.

Es ist aus dem Grund, dass ich in der Regel nur als NetworkService oder SYSTEM ausführen und die Computer-Objekt Rechte in einer Domäne gewähren. Eine Alternative besteht darin, dass das Installationsprogramm das Dienstkonto erstellt und das Kennwort bei jeder Reparatur zufällig anordnet, sodass Sie es nicht dauerhaft beibehalten müssen.

+0

Ich verwende nicht WIX. – ndmj

+0

Der Blog-Artikel, den ich verlinkt habe, zeigt, wie man LsaUtil benutzt, um das Problem zu beheben. Ehrlich, obwohl das Werkzeug, das Sie verwenden, viel zu wünschen übrig lässt. Es stellt die zugrunde liegenden nativen Windows Installer-Dienstfunktionen nicht zur Verfügung, wodurch Sie das Rad neu erfinden müssen. –

+0

Vielen Dank für das Feedback, ich werde dies heute versuchen, da ich fest damit bin, dies für 2 Tage zu machen. – ndmj

0

Es scheint, dass Sie ein Visual Studio-Setup-Projekt verwenden und höchstwahrscheinlich auch einen der TextBoxes-Dialogfelder verwenden, um die Eingabe zu erfassen.

Sie können diese Parameter nicht automatisch in der Befehlszeile übergeben, da Visual Studio benutzerdefinierte Aktionen generiert, um sie zu löschen (und ich weiß nicht warum). In einer unbeaufsichtigten Installation führt Windows nur die InstallExecuteSequence aus, und wenn Sie beispielsweise mit Orca nachsehen, sehen Sie benutzerdefinierte Aktionen wie "CustomTextA_SetProperty_EDIT1", die die Werte löschen. Um das Offensichtliche zu sagen, sind die Werte, die Sie gerade erhalten, leer und Sie können dies überprüfen, indem Sie die Werte irgendwo aufzeichnen.

Ein Ausgangspunkt, um dies zum Laufen zu bringen, ist die Verwendung von Orca, um diese benutzerdefinierten Aktionsaufrufe in der InstallExecuteSequence-Tabelle zu löschen.

Danach besteht ein potenzielles Problem, dass die Werte Ihre benutzerdefinierte Aktion nicht erreichen, da sie nicht gesichert sind. In der Eigenschaftstabelle müssten Sie diese Eigenschaftsnamen daher zur Liste SecureCustomProperties hinzufügen -colon begrenzt (EDIT1; EDIT2 und so weiter).

Visual Studio Setup-Projekte sind nicht gut, und etwas wie WiX wäre besser, weil kein Code erforderlich ist, um Dienste zu installieren, zu starten oder zu stoppen, oder sie mit einem Konto konfigurieren.

+0

Haben Sie einige Beispiele? @PhilDW, und ich gebe auch den Benutzernamen und das Passwort in der Installer-Klasse gibt es keine Benutzerinteraktion. TIA – ndmj

+0

Beispiele für was genau? Das WiX SertviceInstall-Element legt den Benutzernamen und das Kennwort fest. In anderen MSI-Tools wie WiX ist keine VS-Komponente (Installer-Klassen für die Installation von Diensten und Weitergabe von Kontoinformationen) erforderlich, aber im Vergleich zu VS-Setup-Projekten ist dies eine steile Lernkurve . – PhilDW

Verwandte Themen