<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Apache Tomcat 7 (7.0.77) - Windows service HOW-TO</title><meta name="author" content="Mladen Turk"><style type="text/css" media="print">
    .noPrint {display: none;}
    td#mainBody {width: 100%;}
</style><style type="text/css">
code {background-color:rgb(224,255,255);padding:0 0.1em;}
code.attributeName, code.propertyName {background-color:transparent;}


table {
  border-collapse: collapse;
  text-align: left;
}
table *:not(table) {
  /* Prevent border-collapsing for table child elements like <div> */
  border-collapse: separate;
}

th {
  text-align: left;
}


div.codeBox pre code, code.attributeName, code.propertyName, code.noHighlight, .noHighlight code {
  background-color: transparent;
}
div.codeBox {
  overflow: auto;
  margin: 1em 0;
}
div.codeBox pre {
  margin: 0;
  padding: 4px;
  border: 1px solid #999;
  border-radius: 5px;
  background-color: #eff8ff;
  display: table; /* To prevent <pre>s from taking the complete available width. */
  /*
  When it is officially supported, use the following CSS instead of display: table
  to prevent big <pre>s from exceeding the browser window:
  max-width: available;
  width: min-content;
  */
}

div.codeBox pre.wrap {
  white-space: pre-wrap;
}


table.defaultTable tr, table.detail-table tr {
    border: 1px solid #CCC;
}

table.defaultTable tr:nth-child(even), table.detail-table tr:nth-child(even) {
    background-color: #FAFBFF;
}

table.defaultTable tr:nth-child(odd), table.detail-table tr:nth-child(odd) {
    background-color: #EEEFFF;
}

table.defaultTable th, table.detail-table th {
  background-color: #88b;
  color: #fff;
}

table.defaultTable th, table.defaultTable td, table.detail-table th, table.detail-table td {
  padding: 5px 8px;
}


p.notice {
    border: 1px solid rgb(255, 0, 0);
    background-color: rgb(238, 238, 238);
    color: rgb(0, 51, 102);
    padding: 0.5em;
    margin: 1em 2em 1em 1em;
}
</style></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="0"><!--PAGE HEADER--><tr><td><!--PROJECT LOGO--><a href="http://tomcat.apache.org/"><img src="./images/tomcat.gif" align="right" alt="
      The Apache Tomcat Servlet/JSP Container
    " border="0"></a></td><td><h1><font face="arial,helvetica,sanserif">Apache Tomcat 7</font></h1><font face="arial,helvetica,sanserif">Version 7.0.77, Mar 28 2017</font></td><td><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="./images/asf-logo.svg" align="right" alt="Apache Logo" border="0" style="width: 266px;height: 83px;"></a></td></tr></table><table border="0" width="100%" cellspacing="4"><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><tr><!--LEFT SIDE NAVIGATION--><td width="20%" valign="top" nowrap class="noPrint"><p><strong>Links</strong></p><ul><li><a href="index.html">Docs Home</a></li><li><a href="http://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul><p><strong>User Guide</strong></p><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="realm-howto.html">6) Realms and AAA</a></li><li><a href="security-manager-howto.html">7) Security Manager</a></li><li><a href="jndi-resources-howto.html">8) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">9) JDBC DataSources</a></li><li><a href="class-loader-howto.html">10) Classloading</a></li><li><a href="jasper-howto.html">11) JSPs</a></li><li><a href="ssl-howto.html">12) SSL/TLS</a></li><li><a href="ssi-howto.html">13) SSI</a></li><li><a href="cgi-howto.html">14) CGI</a></li><li><a href="proxy-howto.html">15) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">16) MBeans Descriptors</a></li><li><a href="default-servlet.html">17) Default Servlet</a></li><li><a href="cluster-howto.html">18) Clustering</a></li><li><a href="balancer-howto.html">19) Load Balancer</a></li><li><a href="connectors.html">20) Connectors</a></li><li><a href="monitoring.html">21) Monitoring and Management</a></li><li><a href="logging.html">22) Logging</a></li><li><a href="apr.html">23) APR/Native</a></li><li><a href="virtual-hosting-howto.html">24) Virtual Hosting</a></li><li><a href="aio.html">25) Advanced IO</a></li><li><a href="extras.html">26) Additional Components</a></li><li><a href="maven-jars.html">27) Mavenized</a></li><li><a href="security-howto.html">28) Security Considerations</a></li><li><a href="windows-service-howto.html">29) Windows Service</a></li><li><a href="windows-auth-howto.html">30) Windows Authentication</a></li><li><a href="jdbc-pool.html">31) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">32) WebSocket</a></li></ul><p><strong>Reference</strong></p><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.2 Javadocs</a></li><li><a href="elapi/index.html">EL 2.2 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="http://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul><p><strong>Apache Tomcat Development</strong></p><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="http://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></td><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left" id="mainBody"><h1>Windows service HOW-TO</h1><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Table of Contents"><!--()--></a><a name="Table_of_Contents"><strong>Table of Contents</strong></a></font></td></tr><tr><td><blockquote>
<ul><li><a href="#Tomcat_service_application">Tomcat service application</a></li><li><a href="#Tomcat_monitor_application">Tomcat monitor application</a></li><li><a href="#Command_line_arguments">Command line arguments</a></li><li><a href="#Command_line_parameters">Command line parameters</a></li><li><a href="#Installing_services">Installing services</a></li><li><a href="#Updating_services">Updating services</a></li><li><a href="#Removing_services">Removing services</a></li><li><a href="#Debugging_services">Debugging services</a></li><li><a href="#Multiple_Instances">Multiple Instances</a></li></ul>
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Tomcat service application"><!--()--></a><a name="Tomcat_service_application"><strong>Tomcat service application</strong></a></font></td></tr><tr><td><blockquote>
<p>
    <b>Tomcat7</b> is a service application for running Tomcat
    7 as a Windows service.
</p>
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Tomcat monitor application"><!--()--></a><a name="Tomcat_monitor_application"><strong>Tomcat monitor application</strong></a></font></td></tr><tr><td><blockquote>
<p>
    <b>Tomcat7w</b> is a GUI application for monitoring and
    configuring Tomcat services.
</p>
    <p>The available command line options are:</p>

    <table class="defaultTable">
    <tr><td><b>//ES//</b></td>
        <td>Edit service configuration</td>
        <td>This is the default operation. It is called if the no option is
            provided but the executable is renamed to <b>servicenameW.exe</b></td>
    </tr>
    <tr><td><b>//MS//</b></td>
        <td>Monitor service</td>
        <td>Put the icon in the system tray</td>
    </tr>
    </table>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Command line arguments"><!--()--></a><a name="Command_line_arguments"><strong>Command line arguments</strong></a></font></td></tr><tr><td><blockquote>
<p>
    Each command line directive is in the form of <b>//XX//ServiceName</b>
</p>
    <p>The available command line options are:</p>

    <table class="defaultTable">
    <tr><td><b>//TS//</b></td>
        <td>Run the service as console application</td>
        <td>This is the default operation. It is called if the no option is
            provided. The ServiceName is the name of the executable without
            exe suffix, meaning Tomcat7</td>
    </tr>
    <tr><td><b>//RS//</b></td>
        <td>Run the service</td>
        <td>Called only from ServiceManager</td>
    </tr>
    <tr><td><b>//SS//</b></td>
        <td>Stop the service</td>
        <td></td>
    </tr>
    <tr><td><b>//US//</b></td>
        <td>Update service parameters</td>
        <td></td>
    </tr>
    <tr><td><b>//IS//</b></td>
        <td>Install service</td>
        <td></td>
    </tr>
    <tr><td><b>//DS//</b></td>
        <td>Delete service</td>
        <td>Stops the service if running</td>
    </tr>
    </table>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Command line parameters"><!--()--></a><a name="Command_line_parameters"><strong>Command line parameters</strong></a></font></td></tr><tr><td><blockquote>
<p>
    Each command parameter is prefixed with <b>--</b>.
    If the command line is prefixed with <b>++</b> then it's value will
    be appended to the existing option.
    If the environment variable with the same name as command line parameter but
    prefixed with <code>PR_</code> exists it will take precedence.
    For example:</p>
<div class="codeBox"><pre><code>set PR_CLASSPATH=xx.jar</code></pre></div>

<p>is equivalent to providing</p>
<div class="codeBox"><pre><code>--Classpath=xx.jar</code></pre></div>
<p> as command line parameter.</p>

    <table class="defaultTable">
    <tr>
    <th>ParameterName</th>
    <th>Default</th>
    <th>Description</th>
    </tr>
    <tr>
    <td>--Description</td>
    <td></td>
    <td>Service name description (maximum 1024 characters)</td>
    </tr>
    <tr>
    <td>--DisplayName</td>
    <td>ServiceName</td>
    <td>Service display name</td>
    </tr>
    <tr>
    <td>--Install</td>
    <td>procrun.exe //RS//ServiceName</td>
    <td>Install image</td>
    </tr>
    <tr>
    <td>--Startup</td>
    <td>manual</td>
    <td>Service startup mode can be either <b>auto</b> or <b>manual</b></td>
    </tr>
    <tr>
    <td>++DependsOn</td>
    <td></td>
    <td>List of services that this service depend on. Dependent services
        are separated using either <b>#</b> or <b>;</b> characters</td>
    </tr>
    <tr>
    <td>++Environment</td>
    <td></td>
    <td>List of environment variables that will be provided to the service
        in the form <b>key=value</b>. They are separated using either
        <b>#</b> or <b>;</b> characters. If you need to use either the <b>#</b>
        or <b>;</b> character within a value then the entire value must be
        enclosed inside single quotes.</td>
    </tr>
    <tr>
    <td>--User</td>
    <td></td>
    <td>User account used for running executable. It is used only for
        StartMode <b>java</b> or <b>exe</b> and enables running applications
        as service under account without LogonAsService privilege.</td>
    </tr>
    <tr>
    <td>--Password</td>
    <td></td>
    <td>Password for user account set by --User parameter</td>
    </tr>
    <tr>
    <td>--JavaHome</td>
    <td>JAVA_HOME</td>
    <td>Set a different JAVA_HOME than defined by JAVA_HOME environment
        variable</td>
    </tr>
    <tr>
    <td>--Jvm</td>
    <td>auto</td>
    <td>Use either <b>auto</b> (i.e. find the JVM from the Windows registry)
        or specify the full path to the <b>jvm.dll</b>.
        You can use the environment variable expansion here.</td>
    </tr>
    <tr>
    <td>++JvmOptions</td>
    <td>-Xrs</td>
    <td>List of options in the form of <b>-D</b> or <b>-X</b> that will be
        passed to the JVM. The options are separated using either
        <b>#</b> or <b>;</b> characters. (Not used in <b>exe</b> mode.)</td>
    </tr>
    <tr>
    <td>--Classpath</td>
    <td></td>
    <td>Set the Java classpath. (Not used in <b>exe</b> mode.)</td>
    </tr>
    <tr>
    <td>--JvmMs</td>
    <td></td>
    <td>Initial memory pool size in MB. (Not used in <b>exe</b> mode.)</td>
    </tr>
    <tr>
    <td>--JvmMx</td>
    <td></td>
    <td>Maximum memory pool size in MB. (Not used in <b>exe</b> mode.)</td>
    </tr>
    <tr>
    <td>--JvmSs</td>
    <td></td>
    <td>Thread stack size in KB. (Not used in <b>exe</b> mode.)</td>
    </tr>
    <tr>
    <td>--StartMode</td>
    <td></td>
    <td>One of <b>jvm</b>, <b>Java</b> or <b>exe</b>. The modes are:
      <ul>
        <li>jvm - start Java in-process. Depends on jvm.dll, see <b>--Jvm</b>.</li>
        <li>Java - same as exe, but automatically uses the default Java
         executable, i.e. %JAVA_HOME%\bin\java.exe. Make sure JAVA_HOME is set
         correctly, or use --JavaHome to provide the correct location.
         If neither is set, procrun will try to find the default JDK (not JRE)
         from the Windows registry.</li>
        <li>exe - run the image as a separate process</li>
      </ul>
    </td>
    </tr>
    <tr>
    <td>--StartImage</td>
    <td></td>
    <td>Executable that will be run. Only applies to <b>exe</b> mode.</td>
    </tr>
    <tr>
    <td>--StartPath</td>
    <td></td>
    <td>Working path for the start image executable.</td>
    </tr>
    <tr>
    <td>--StartClass</td>
    <td>Main</td>
    <td>Class that contains the startup method. Applies to the <b>jvm</b> and
        <b>Java</b> modes. (Not used in <b>exe</b> mode.) </td>
    </tr>
    <tr>
    <td>--StartMethod</td>
    <td>main</td>
    <td>Method name if differs then main</td>
    </tr>
    <tr>
    <td>++StartParams</td>
    <td></td>
    <td>List of parameters that will be passed to either StartImage or
        StartClass. Parameters are separated using either <b>#</b> or
        <b>;</b> character.</td>
    </tr>
    <tr>
    <td>--StopMode</td>
    <td></td>
    <td>One of <b>jvm</b>, <b>Java</b> or <b>exe</b>. See <b>--StartMode</b>
        for further details. </td>
    </tr>
    <tr>
    <td>--StopImage</td>
    <td></td>
    <td>Executable that will be run on Stop service signal. Only applies to
        <b>exe</b> mode.</td>
    </tr>
    <tr>
    <td>--StopPath</td>
    <td></td>
    <td>Working path for the stop image executable. Does not apply to <b>jvm</b>
        mode.</td>
    </tr>
    <tr>
    <td>--StopClass</td>
    <td>Main</td>
    <td>Class that will be used on Stop service signal. Applies to the
        <b>jvm</b> and <b>Java</b> modes. </td>
    </tr>
    <tr>
    <td>--StopMethod</td>
    <td>main</td>
    <td>Method name if differs then main</td>
    </tr>
    <tr>
    <td>++StopParams</td>
    <td></td>
    <td>List of parameters that will be passed to either StopImage or
        StopClass. Parameters are separated using either <b>#</b> or
        <b>;</b> character.</td>
    </tr>
    <tr>
    <td>--StopTimeout</td>
    <td>No Timeout</td>
    <td>Defines the timeout in seconds that procrun waits for service to
        exit gracefully.</td>
    </tr>
    <tr>
    <td>--LogPath</td>
    <td>%SystemRoot%\System32\LogFiles\Apache</td>
    <td>Defines the path for logging. Creates the directory if necessary.</td>
    </tr>
    <tr>
    <td>--LogPrefix</td>
    <td>commons-daemon</td>
    <td>Defines the service log filename prefix. The log file is created in the
        LogPath directory with <code>.YEAR-MONTH-DAY.log</code> suffix</td>
    </tr>
    <tr>
    <td>--LogLevel</td>
    <td>Info</td>
    <td>Defines the logging level and can be either <b>Error</b>,
        <b>Info</b>, <b>Warn</b> or <b>Debug</b>. (Case insensitive).</td>
    </tr>
    <tr>
    <td>--StdOutput</td>
    <td></td>
    <td>Redirected stdout filename.
        If named <b>auto</b> then file is created inside <b>LogPath</b> with the
        name <b>service-stdout.YEAR-MONTH-DAY.log</b>.</td>
    </tr>
    <tr>
    <td>--StdError</td>
    <td></td>
    <td>Redirected stderr filename.
        If named <b>auto</b> then file is created inside <b>LogPath</b> with the
        name <b>service-stderr.YEAR-MONTH-DAY.log</b>.</td>
    </tr>
    <tr>
    <td>--PidFile</td>
    <td></td>
    <td>Defines the file name for storing the running process id. Actual file is
        created in the <b>LogPath</b> directory</td>
    </tr>
    </table>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Installing services"><!--()--></a><a name="Installing_services"><strong>Installing services</strong></a></font></td></tr><tr><td><blockquote>
<p>
The safest way to manually install the service is to use the provided
<b>service.bat</b> script. Administrator privileges are required to run this
script. If necessary, you can use the <code>/user</code> switch to specify
a user to use for the installation of the service.
</p>
<p>
<strong>NOTE:</strong> On Windows Vista or any later operating system with User
Account Control (UAC) enabled you will be asked for additional privileges
when 'Tomcat7.exe' is launched by the script.<br>
If you want to pass additional options to service installer as
<code>PR_*</code> environment variables, you have to either configure them
globally in OS, or launch the program that sets them with elevated privileges
(e.g. right-click on cmd.exe and select "Run as administrator"; on Windows 8
(or later) or Windows Server 2012 (or later), you can open an elevated command
prompt for the current directory from the Explorer
by clicking on the "File" menu bar). See issue <a href="http://bz.apache.org/bugzilla/show_bug.cgi?id=56143">56143</a> for details.
</p>

<div class="codeBox"><pre><code>Install the service named 'Tomcat7'
C:\&gt; service.bat install</code></pre></div>

<p>There is a 2nd optional parameter that lets you specify the name of the
service, as displayed in Windows services.</p>

<div class="codeBox"><pre><code>Install the service named 'MyService'
C:\&gt; service.bat install MyService</code></pre></div>

<p>
If using tomcat7.exe, you need to use the <b>//IS//</b> parameter.</p>

<div class="codeBox"><pre><code>Install the service named 'Tomcat7'
C:\&gt; tomcat7 //IS//Tomcat7 --DisplayName="Apache Tomcat 7" ^
     --Install="C:\Program Files\Tomcat\bin\tomcat7.exe" --Jvm=auto ^
     --StartMode=jvm --StopMode=jvm ^
     --StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start ^
     --StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop</code></pre></div>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Updating services"><!--()--></a><a name="Updating_services"><strong>Updating services</strong></a></font></td></tr><tr><td><blockquote>
<p>
To update the service parameters, you need to use the <b>//US//</b> parameter.
</p>

<div class="codeBox"><pre><code>Update the service named 'Tomcat7'
C:\&gt; tomcat7 //US//Tomcat7 --Description="Apache Tomcat Server - http://tomcat.apache.org/ " ^
     --Startup=auto --Classpath=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar</code></pre></div>

<p>If you gave the service an optional name, you need to specify it like this:
</p>

<div class="codeBox"><pre><code>Update the service named 'MyService'
C:\&gt; tomcat7 //US//MyService --Description="Apache Tomcat Server - http://tomcat.apache.org/ " ^
     --Startup=auto --Classpath=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar</code></pre></div>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Removing services"><!--()--></a><a name="Removing_services"><strong>Removing services</strong></a></font></td></tr><tr><td><blockquote>
<p>
To remove the service, you need to use the <b>//DS//</b> parameter.<br>
If the service is running it will be stopped and then deleted.</p>

<div class="codeBox"><pre><code>Remove the service named 'Tomcat7'
C:\&gt; tomcat7 //DS//Tomcat7</code></pre></div>

<p>If you gave the service an optional name, you need to specify it like this:
</p>

<div class="codeBox"><pre><code>Remove the service named 'MyService'
C:\&gt; tomcat7 //DS//MyService</code></pre></div>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Debugging services"><!--()--></a><a name="Debugging_services"><strong>Debugging services</strong></a></font></td></tr><tr><td><blockquote>
<p>
To run the service in console mode, you need to use the <b>//TS//</b> parameter.
The service shutdown can be initiated by pressing <b>CTRL+C</b> or
<b>CTRL+BREAK</b>.
If you rename the tomcat7.exe to testservice.exe then you can just execute the
testservice.exe and this command mode will be executed by default.</p>

<div class="codeBox"><pre><code>Run the service named 'Tomcat7' in console mode
C:\&gt; tomcat7 //TS//Tomcat7 [additional arguments]
Or simply execute:
C:\&gt; tomcat7</code></pre></div>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Multiple Instances"><!--()--></a><a name="Multiple_Instances"><strong>Multiple Instances</strong></a></font></td></tr><tr><td><blockquote>
<p>
Tomcat supports installation of multiple instances. You can have a single
installation of Tomcat with multiple instances running on different IP/port
combinations, or multiple Tomcat versions, each running one or more instances on
different IP/ports.</p>
<p>
Each instance folder will need the following structure:
</p>
<ul>
<li>conf</li>
<li>logs</li>
<li>temp</li>
<li>webapps</li>
<li>work</li>
</ul>
<p>
At a minimum, conf should contain a copy of the following files from
CATALINA_HOME\conf\. Any files not copied and edited, will be picked up by
default from CATALINA_HOME\conf, i.e. CATALINA_BASE\conf files override defaults
from CATALINA_HOME\conf.</p>
<ul>
<li>server.xml</li>
<li>web.xml</li>
</ul>
<p>
You must edit CATALINA_BASE\conf\server.xml to specify a unique IP/port for the
instance to listen on. Find the line that contains
<code>&lt;Connector port="8080" ...</code> and add an address attribute and/or
update the port number so as to specify a unique IP/port combination.</p>
<p>
To install an instance, first set the CATALINA_HOME environment variable to the
name of the Tomcat installation directory. Then create a second environment
variable CATALINA_BASE and point this to the instance folder. Then run "service
install" command specifying a service name.</p>

<div class="codeBox"><pre><code>set CATALINA_HOME=c:\tomcat_7
set CATALINA_BASE=c:\tomcat_7\instances\instance1
service install instance1</code></pre></div>

<p>
To modify the service settings, you can run <b>tomcat7w //ES//instance1</b>.
</p>
<p>
For additional instances, create additional instance folder, update the
CATALINA_BASE environment variable, and run the service install again.</p>

<div class="codeBox"><pre><code>set CATALINA_BASE=c:\tomcat_7\instances\instance2
service install instance2</code></pre></div>

</blockquote></td></tr></table></td></tr><tr class="noPrint"><td width="20%" valign="top" nowrap class="noPrint"></td><td width="80%" valign="top" align="left"><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="comments_section" id="comments_section"><strong>Comments</strong></a></font></td></tr><tr><td><blockquote><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
              on improving documentation for Apache Tomcat.<br><br>
              If you have trouble and need help, read
              <a href="http://tomcat.apache.org/findhelp.html">Find Help</a> page
              and ask your question on the tomcat-users
              <a href="http://tomcat.apache.org/lists.html">mailing list</a>.
              Do not ask such questions here. This is not a Q&amp;A section.<br><br>
              The Apache Comments System is explained <a href="./comments.html">here</a>.
              Comments may be removed by our moderators if they are either
              implemented or considered invalid/off-topic.</p><script type="text/javascript"><!--//--><![CDATA[//><!--
              var comments_shortname = 'tomcat';
              var comments_identifier = 'http://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html';
              (function(w, d) {
                  if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
                      d.write('<div id="comments_thread"><\/div>');
                      var s = d.createElement('script');
                      s.type = 'text/javascript';
                      s.async = true;
                      s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
                      (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
                  }
                  else {
                      d.write('<div id="comments_thread"><strong>Comments are disabled for this page at the moment.<\/strong><\/div>');
                  }
              })(window, document);
              //--><!]]></script></blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em>
        Copyright &copy; 1999-2017, Apache Software Foundation
        </em></font></div></td></tr></table></body></html>