Paul Grimshaw
Paul Grimshaw

Reputation: 21024

Deploy a windows service without Installshield

Is it possible to deploy a windows service without going through Installshield? I have a very basic service which simply probes a database, and wish to deploy it on a server.

I tried using Installsheild LE, but get error 1001 on install, which is hard to troubleshoot, and anyhow Installshield feels like overkill in this case... is there a way can just install the service direct by command line or other method?

Upvotes: 0

Views: 468

Answers (4)

Nattrass
Nattrass

Reputation: 1293

You can use the command line tool sc.exe to create and configure a windows service (basically insert the config into registry), assuming you have already deployed the built .exe to disk somewhere on your server.

http://support2.microsoft.com/kb/251192

Upvotes: 0

Christopher Painter
Christopher Painter

Reputation: 55581

Building and Deploying a Windows Service using IsWiX

The above is a short video I made showing how to use WiX / IsWiX to generate a very clean MSI for installing a service. It's really easy, fast, elegant and free.

Upvotes: 0

StaWho
StaWho

Reputation: 2488

Yes, if your service has an Installer class then, you can install it from command line with installutil.exe

using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;

    [RunInstaller(true)]
    public class ServiceInstaller : Installer
    {
        public ServiceInstaller()
        {
            ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
            ServiceInstaller serviceInstaller = new ServiceInstaller();

            //# Service Account Information
            serviceProcessInstaller.Account = ServiceAccount.User;
            serviceProcessInstaller.Username = "";
            serviceProcessInstaller.Password = "";

            //# Service Information
            serviceInstaller.DisplayName = "Service name"
            serviceInstaller.Description = "Service description"
            serviceInstaller.StartType = ServiceStartMode.Automatic;

            //# This must be identical to the WindowsService.ServiceBase name
            //# set in the constructor of WindowsService.cs
            serviceInstaller.ServiceName = "Service Name";

            this.Installers.Add(serviceProcessInstaller);
            this.Installers.Add(serviceInstaller);
        }
    }

Upvotes: 1

Richard
Richard

Reputation: 108975

Yes.

However, there are options, from best to worst:

  1. There are other tools for writing installers out there. Eg. the full version of install Shield or WiX (which MS created, and is used for the Visual Studio installer).

  2. You could use installUtil having included a type derived from ServiceInstaller in your assembly. (See How to: Install and Uninstall Service.)

  3. You can manually edit the registry.

#3 Is seriously easy to mess up, and won't help you with the event logging and performance counters you should be including.1 #2 is best in development, and will set up event logs and performance counters as well (remember you'll need to elevate to install things, and to attach a debugger to the service when running as a service).

Using a real installer (#1) is best in test (staging) and production environments.


1 When you get asked why it isn't working, you'll want to be able to work out what's going on (or not).

Upvotes: 3

Related Questions