How to create an installer for a .net Windows Service using Visual Studio

前端 未结 5 1185
天涯浪人
天涯浪人 2020-12-04 04:23

How do I create an installer for a Windows Service that I have created using Visual Studio?

5条回答
  •  情书的邮戳
    2020-12-04 05:03

    Nor Kelsey, nor Brendan solutions does not works for me in Visual Studio 2015 Community.

    Here is my brief steps how to create service with installer:

    1. Run Visual Studio, Go to File->New->Project
    2. Select .NET Framework 4, in 'Search Installed Templates' type 'Service'
    3. Select 'Windows Service'. Type Name and Location. Press OK.
    4. Double click Service1.cs, right click in designer and select 'Add Installer'
    5. Double click ProjectInstaller.cs. For serviceProcessInstaller1 open Properties tab and change 'Account' property value to 'LocalService'. For serviceInstaller1 change 'ServiceName' and set 'StartType' to 'Automatic'.
    6. Double click serviceInstaller1. Visual Studio creates serviceInstaller1_AfterInstall event. Write code:

      private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
      {
          using (System.ServiceProcess.ServiceController sc = new 
          System.ServiceProcess.ServiceController(serviceInstaller1.ServiceName))
          {
              sc.Start();
          }
      }
      
    7. Build solution. Right click on project and select 'Open Folder in File Explorer'. Go to bin\Debug.

    8. Create install.bat with below script:

      :::::::::::::::::::::::::::::::::::::::::
      :: Automatically check & get admin rights
      :::::::::::::::::::::::::::::::::::::::::
      @echo off
      CLS 
      ECHO.
      ECHO =============================
      ECHO Running Admin shell
      ECHO =============================
      
      :checkPrivileges 
      NET FILE 1>NUL 2>NUL
      if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ) 
      
      :getPrivileges 
      if '%1'=='ELEV' (shift & goto gotPrivileges)  
      ECHO. 
      ECHO **************************************
      ECHO Invoking UAC for Privilege Escalation 
      ECHO **************************************
      
      setlocal DisableDelayedExpansion
      set "batchPath=%~0"
      setlocal EnableDelayedExpansion
      ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs" 
      ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs" 
      "%temp%\OEgetPrivileges.vbs" 
      exit /B 
      
      :gotPrivileges 
      ::::::::::::::::::::::::::::
      :START
      ::::::::::::::::::::::::::::
      setlocal & pushd .
      
      cd /d %~dp0
      %windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil /i "WindowsService1.exe"
      pause
      
    9. Create uninstall.bat file (change in pen-ult line /i to /u)
    10. To install and start service run install.bat, to stop and uninstall run uninstall.bat

提交回复
热议问题