如果注册NT服务

xhg0418 2007-03-05 10:17:02
我在用JAVA编写一个系统的安装程序,要安装的系统中包括一个服务程序,用C++写的,可跨平台运行!请问如何在安装程序中自动注册为服务并可自动运行?
在Linux上可以通过init文件来实现,但是在nt上,是用scmmanager来维护服务的,不知道java中有没有相关的类可以用来对SCM进行管理?
请高手支招,最好给出源码.谢了
...全文
227 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sagezk 2008-06-12
  • 打赏
  • 举报
回复
另外可以使用
java.lang.ProcessBuilder 执行下面创建系统服务的 Windows 命令来完成服务的创建
sc create ServiceName binpath= "java.exe YourMainClass" displayname= "ServiceDisplayName" depend= Tcpip start= auto
注意“=”后面必须有一空格,否则会出现错误。
然后分析命令执行结果,如果执行成功后想马上启动服务,可以再利用 ProcessBuilder 执行
net start ServiceName 来启动服务,或者可以直接在“管理工具”的“服务”中手动启动。
同理还可以删除服务,可以使用 sc /? 看看具体的命令使用方法。
sagezk 2008-06-12
  • 打赏
  • 举报
回复
没看日期,一年多的帖子都往上顶,服
sagezk 2008-06-12
  • 打赏
  • 举报
回复
另外可以使用
java.lang.ProcessBuilder 执行下面创建系统服务的 Windows 命令来完成服务的创建
sc create ServiceName binpath= "java.exe YourMainClass" displayname= "ServiceDisplayName" depend= Tcpip start= auto
注意“=”后面必须有一空格,否则会出现错误。
然后分析命令执行结果,如果执行成功后想马上启动服务,可以再利用 ProcessBuilder 执行
net start ServiceName 来启动服务,或者可以直接在“管理工具”的“服务”中手动启动。
同理还可以删除服务,可以使用 sc /? 看看具体的命令使用方法。
sagezk 2008-06-12
  • 打赏
  • 举报
回复
另外可以使用
java.lang.ProcessBuilder 执行下面创建系统服务的 Windows 命令来完成服务的创建
sc create ServiceName binpath= "java.exe YourMainClass" displayname= "ServiceDisplayName" depend= Tcpip start= auto
注意“=”后面必须有一空格,否则会出现错误。
然后分析命令执行结果,如果执行成功后想马上启动服务,可以再利用 ProcessBuilder 执行
net start ServiceName 来启动服务,或者可以直接在“管理工具”的“服务”中手动启动。
同理还可以删除服务,可以使用 sc /? 看看具体的命令使用方法。
sagezk 2008-06-12
  • 打赏
  • 举报
回复
另外可以使用
java.lang.ProcessBuilder 执行下面创建系统服务的 Windows 命令来完成服务的创建
sc create ServiceName binpath= "java.exe YourMainClass" displayname= "ServiceDisplayName" depend= Tcpip start= auto
注意“=”后面必须有一空格,否则会出现错误。
然后分析命令执行结果,如果执行成功后想马上启动服务,可以再利用 ProcessBuilder 执行
net start ServiceName 来启动服务,或者可以直接在“管理工具”的“服务”中手动启动。
同理还可以删除服务,可以使用 sc /? 看看具体的命令使用方法。
sagezk 2008-06-12
  • 打赏
  • 举报
回复
另外可以使用
java.lang.ProcessBuilder 执行下面创建系统服务的 Windows 命令来完成服务的创建
sc create ServiceName binpath= "java.exe YourMainClass" displayname= "ServiceDisplayName" depend= Tcpip start= auto
注意“=”后面必须有一空格,否则会出现错误。
然后分析命令执行结果,如果执行成功后想马上启动服务,可以再利用 ProcessBuilder 执行
net start ServiceName 来启动服务,或者可以直接在“管理工具”的“服务”中手动启动。
同理还可以删除服务,可以使用 sc /? 看看具体的命令使用方法。
sagezk 2008-06-12
  • 打赏
  • 举报
回复
另外可以使用
java.lang.ProcessBuilder 执行下面创建系统服务的 Windows 命令来完成服务的创建
sc create ServiceName binpath= "java.exe YourMainClass" displayname= "ServiceDisplayName" depend= Tcpip start= auto
注意“=”后面必须有一空格,否则会出现错误。
然后分析命令执行结果,如果执行成功后想马上启动服务,可以再利用 ProcessBuilder 执行
net start ServiceName 来启动服务,或者可以直接在“管理工具”的“服务”中手动启动。
同理还可以删除服务,可以使用 sc /? 看看具体的命令使用方法。
sagezk 2008-06-12
  • 打赏
  • 举报
回复
另外可以使用
java.lang.ProcessBuilder 执行下面创建系统服务的 Windows 命令来完成服务的创建
sc create ServiceName binpath= "java.exe YourMainClass" displayname= "ServiceDisplayName" depend= Tcpip start= auto
注意“=”后面必须有一空格,否则会出现错误。
然后分析命令执行结果,如果执行成功后想马上启动服务,可以再利用 ProcessBuilder 执行
net start ServiceName 来启动服务,或者可以直接在“管理工具”的“服务”中手动启动。
同理还可以删除服务,可以使用 sc /? 看看具体的命令使用方法。
sagezk 2008-06-12
  • 打赏
  • 举报
回复
上面是 Tomcat 向系统注册服务的方法,可以借鉴一下!
sagezk 2008-06-12
  • 打赏
  • 举报
回复
可以使用批处理文件,如下:
[code=BatchFile]
@echo off
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements. See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License. You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

if "%OS%" == "Windows_NT" setlocal
rem ---------------------------------------------------------------------------
rem NT Service Install/Uninstall script
rem
rem Options
rem install Install the service using Tomcat6 as service name.
rem Service is installed using default settings.
rem remove Remove the service from the System.
rem
rem name (optional) If the second argument is present it is considered
rem to be new service name
rem
rem $Id: service.bat 600659 2007-12-03 20:15:09Z jim $
rem ---------------------------------------------------------------------------

rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%
if not "%CATALINA_HOME%" == "" goto gotHome
set CATALINA_HOME=%cd%
if exist "%CATALINA_HOME%\bin\tomcat6.exe" goto okHome
rem CD to the upper dir
cd ..
set CATALINA_HOME=%cd%
:gotHome
if exist "%CATALINA_HOME%\bin\tomcat6.exe" goto okHome
echo The tomcat.exe was not found...
echo The CATALINA_HOME environment variable is not defined correctly.
echo This environment variable is needed to run this program
goto end
rem Make sure prerequisite environment variables are set
if not "%JAVA_HOME%" == "" goto okHome
echo The JAVA_HOME environment variable is not defined
echo This environment variable is needed to run this program
goto end
:okHome
if not "%CATALINA_BASE%" == "" goto gotBase
set CATALINA_BASE=%CATALINA_HOME%
:gotBase

set EXECUTABLE=%CATALINA_HOME%\bin\tomcat6.exe

rem Set default Service name
set SERVICE_NAME=Tomcat6
set PR_DISPLAYNAME=Apache Tomcat

if "%1" == "" goto displayUsage
if "%2" == "" goto setServiceName
set SERVICE_NAME=%2
set PR_DISPLAYNAME=Apache Tomcat %2
:setServiceName
if %1 == install goto doInstall
if %1 == remove goto doRemove
if %1 == uninstall goto doRemove
echo Unknown parameter "%1"
:displayUsage
echo.
echo Usage: service.bat install/remove [service_name]
goto end

:doRemove
rem Remove the service
"%EXECUTABLE%" //DS//%SERVICE_NAME%
echo The service '%SERVICE_NAME%' has been removed
goto end

:doInstall
rem Install the service
echo Installing the service '%SERVICE_NAME%' ...
echo Using CATALINA_HOME: %CATALINA_HOME%
echo Using CATALINA_BASE: %CATALINA_BASE%
echo Using JAVA_HOME: %JAVA_HOME%

rem Use the environment variables as an example
rem Each command line option is prefixed with PR_

set PR_DESCRIPTION=Apache Tomcat Server - http://tomcat.apache.org/
set PR_INSTALL=%EXECUTABLE%
set PR_LOGPATH=%CATALINA_BASE%\logs
set PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar
rem Set the server jvm from JAVA_HOME
set PR_JVM=%JAVA_HOME%\jre\bin\server\jvm.dll
if exist "%PR_JVM%" goto foundJvm
rem Set the client jvm from JAVA_HOME
set PR_JVM=%JAVA_HOME%\jre\bin\client\jvm.dll
if exist "%PR_JVM%" goto foundJvm
set PR_JVM=auto
:foundJvm
echo Using JVM: %PR_JVM%
"%EXECUTABLE%" //IS//%SERVICE_NAME% --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop
if not errorlevel 1 goto installed
echo Failed installing '%SERVICE_NAME%' service
goto end
:installed
rem Clear the environment variables. They are not needed any more.
set PR_DISPLAYNAME=
set PR_DESCRIPTION=
set PR_INSTALL=
set PR_LOGPATH=
set PR_CLASSPATH=
set PR_JVM=
rem Set extra parameters
"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions "-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed" --StartMode jvm --StopMode jvm
rem More extra parameters
set PR_LOGPATH=%CATALINA_BASE%\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" --JvmMs 128 --JvmMx 256
echo The service '%SERVICE_NAME%' has been installed.

:end
cd %CURRENT_DIR%
[/code]
little06 2008-06-11
  • 打赏
  • 举报
回复
看看能否直接写注册表

专门有个地方描述服务的
youzy 2008-06-10
  • 打赏
  • 举报
回复
不懂,只有帮顶
haoxiongok 2008-05-12
  • 打赏
  • 举报
回复
帮楼主顶上去

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧