This section is from the "Version Control with Subversion" book, by Ben Collins-Sussman, Brian W. Fitzpatrick and C. Michael Pilato. Also available from Amazon: Version Control with Subversion.
If your Windows system is a descendant of Windows NT
(2000, 2003, XP, Vista), then you can
run svnserve as a standard Windows
service. This is typically a much nicer experience than
running it as a standalone daemon with the --daemon
(-d)
option. Using daemon-mode requires launching
a console, typing a command, and then leaving the console
window running indefinitely. A Windows service, however,
runs in the background, can start at boot time
automatically, and can be started and stopped using the same
consistent administration interface as other
Windows services.
You'll need to define the new service using the command-line tool SC.EXE. Much like the inetd configuration line, you must specify an exact invocation of svnserve for Windows to run at start-up time:
C:\> sc create svn binpath= "C:\svn\bin\svnserve.exe --service -r C:\repos" displayname= "Subversion Server" depend= Tcpip start= auto
This defines a new Windows service
named “svn”, and which executes a
particular svnserve.exe command when
started (in this case, rooted
at C:\repos
.) There are a number of
caveats in the prior example, however.
First, notice that the svnserve.exe
program must always be invoked with
the --service
option. Any other options to
svnserve must then be specified on the
same line, but you cannot add conflicting options such
as --daemon
(-d)
, --tunnel
, or --inetd
(-i)
. Options such as -r
or --listen-port
are fine, though. Second, be
careful about spaces when invoking
the SC.EXE command: the
key= value
patterns must have no
spaces between key=
and exactly one
space before the value
. Lastly, be
careful about spaces in your command-line to be invoked. If
a directory name contains spaces (or other characters that
need escaping), place the entire inner value
of binpath
in double-quotes, by escaping
them:
C:\> sc create svn binpath= "\"C:\program files\svn\bin\svnserve.exe\" --service -r C:\repos" displayname= "Subversion Server" depend= Tcpip start= auto
Also note that the word binpath
is
misleading—its value is a command
line, not the path to an executable. That's why
you need to surround it with quote marks if it contains
embedded spaces.
Once the service is defined, it can stopped, started, or queried using standard GUI tools (the Services administrative control panel), or at the command line as well:
C:\> net stop svn C:\> net start svn
The service can also be uninstalled (i.e. undefined) by
deleting its definition: sc delete svn
.
Just be sure to stop the service first!
The SC.EXE program has many other
subcommands and options; run sc /?
to
learn more about it.