2010-01-15 10 views
37

Wie installiere ich einen Windows-Dienst programmgesteuert, ohne installutil.exe zu verwenden?Windows-Dienst programmgesteuert installieren

+0

Und keine anderen 3rd-Party-Installer verwenden? –

+0

yep .... Ich wünschte, ich könnte eine Funktion wie installservice() verwenden, und wenn ich auf die windowsservice.exe doppelklicke, überprüft es, ob es installiert ist, wenn es nicht installiert wird, installiert es sich. – Josh

+1

das ist eine gute Funktion :) :) – Danail

Antwort

54

Sie den Dienst, indem Sie diesen Code installieren kann (in der Programmdatei, Program.cs) selbst zu installieren, wenn von der Kommandozeile mit speziellen Parametern ausführen:

/// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     static void Main(string[] args) 
     { 
      if (System.Environment.UserInteractive) 
      { 

       if (args.Length > 0) 
       { 
        switch (args[0]) 
        { 
         case "-install": 
          { 
           ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location }); 
           break; 
          } 
         case "-uninstall": 
          { 
           ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); 
           break; 
          } 
        } 
       } 
      } 
      else 
      { 
       ServiceBase[] ServicesToRun; 
       ServicesToRun = new ServiceBase[] { new MyService() }; 
       ServiceBase.Run(ServicesToRun); 
      } 
     } 
+0

Dieser Link ist nicht erreichbar. –

+6

Obwohl dies eine klare und geeignete Vorgehensweise ist, anstatt "advapi32.dll" auf niedriger Ebene zu verwenden, lautet die Framework-Dokumentation "Diese API unterstützt die .NET Framework-Infrastruktur und soll nicht direkt aus Ihrem Code verwendet werden." Aber ich bevorzuge immer noch "ManagedInstallerClass" und die Risiken zukünftiger Inkompatibilitäten in neuen .net-Versionen. (http://msdn.microsoft.com/pt-br/library/system.configuration.install.managedinstallerclass) – Luciano

3

Ich installiere und deinstalliere meinen Windows-Dienst über die Befehlszeile, z. B. MyWindowsService.exe -install und MyWindowsService.exe -uninstall, um die Verwendung von installutil.exe selbst zu vermeiden. Ich habe eine Reihe von Anweisungen geschrieben, wie man das macht here.

+0

Das OP fragte, wie dies programmgesteuert zu tun, nicht über die Befehlszeile. – Mike

+0

Meine Lösung ist eine programmatische Lösung, auf die über die Befehlszeile genauso zugegriffen wird wie die akzeptierte Antwort. –

9

ich die Methode aus dem folgenden Codeproject verwenden Artikel, und es funktioniert großartig.

Windows Services Can Install Themselves

+2

Great link; Es verweist jedoch auf einen Link von Mahmoud Nasr, der gebrochen ist. Ich habe das benutzt und es funktioniert für mich. https://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 –

+1

Während dieser Link antworten kann die Frage, es ist besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18705889) – amod

Verwandte Themen