2010-01-15 39 views
37

Jak zainstalować program Windows automatycznie, bez użycia installutil.exe?Programowe instalowanie usługi Windows

+0

Nie używasz innych instalatorów innych firm? –

+0

tak ... chciałbym móc użyć funkcji takiej jak installservice() i gdy dwukrotnie klikam na windowsservice.exe, sprawdza on, czy jest zainstalowany, jeśli nie jest zainstalowany, sam się instaluje. – Josh

+1

to jest jedna dobra funkcja :) :) – Danail

Odpowiedz

54

Można zainstalować usługę dodając ten kod (w pliku programu Program.cs), aby zainstalować się po uruchomieniu z linii poleceń za pomocą określonych parametrów:

/// <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

To łącze jest wyłączone. –

+6

Mimo że jest to jasny i odpowiedni sposób na to, zamiast używać advapi32.dll "niskiego poziomu", dokumentacja ramowa mówi "To API obsługuje infrastrukturę .NET Framework i nie jest przeznaczone do użycia bezpośrednio z twojego kodu.". Nadal jednak preferuję "ManagedInstallerClass" i ryzyko związane z przyszłymi niezgodnościami w nowych wersjach .net. (http://msdn.microsoft.com/pt-br/library/system.configuration.install.managedinstallerclass) – Luciano

3

Instaluję i odinstalowuję usługę Windows za pomocą wiersza poleceń, np. MyWindowsService.exe -install i MyWindowsService.exe -uninstall, aby uniknąć samodzielnego korzystania z installutil.exe. Napisałem zestaw instrukcji, jak to zrobić here.

+0

OP zapytał, jak to zrobić programowo, nie za pomocą wiersza poleceń. – Mike

+0

Moje rozwiązanie to programowe rozwiązanie, do którego można uzyskać dostęp za pośrednictwem wiersza poleceń w taki sam sposób, jak przyjęta odpowiedź. –

9

używam metody z poniższego CodeProject artykuł i działa świetnie.

Windows Services Can Install Themselves

+2

Świetny link; jednak odwołuje się do linku napisanego przez Mahmouda Nasra, który jest zepsuty. Użyłem tego i działa dla mnie. https://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 –

+1

Podczas gdy ten link może odpowiadać pytanie, lepiej w tym miejscu umieścić istotne części odpowiedzi i podać odsyłacz do odniesienia. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ opinia/niskiej jakości-posts/18705889) – amod

Powiązane problemy