不使用installutil.exe安装WINDOWS服务
2009-06-05 10:17
363 查看
using
System;
using
System.Runtime.InteropServices;
namespace
MyServiceInstaller
{
class
ServiceInstaller
{
#region Private Variables
private
string
_servicePath;
private
string
_serviceName;
private
string
_serviceDisplayName;
#endregion Private Variables
#region DLLImport
[DllImport(
"advapi32.dll"
)]
public
static
extern
IntPtr OpenSCManager(
string
lpMachineName,
string
lpSCDB,
int
scParameter);
[DllImport(
"Advapi32.dll"
)]
public
static
extern
IntPtr CreateService(IntPtr SC_HANDLE,
string
lpSvcName,
string
lpDisplayName,
int
dwDesiredAccess,
int
dwServiceType,
int
dwStartType,
int
dwErrorControl,
string
lpPathName,
string
lpLoadOrderGroup,
int
lpdwTagId,
string
lpDependencies,
string
lpServiceStartName,
string
lpPassword);
[DllImport(
"advapi32.dll"
)]
public
static
extern
void
CloseServiceHandle(IntPtr SCHANDLE);
[DllImport(
"advapi32.dll"
)]
public
static
extern
int
StartService(IntPtr SVHANDLE,
int
dwNumServiceArgs,
string
lpServiceArgVectors);
[DllImport(
"advapi32.dll"
,SetLastError=
true
)]
public
static
extern
IntPtr OpenService(IntPtr SCHANDLE,
string
lpSvcName,
int
dwNumServiceArgs);
[DllImport(
"advapi32.dll"
)]
public
static
extern
int
DeleteService(IntPtr SVHANDLE);
[DllImport(
"kernel32.dll"
)]
public
static
extern
int
GetLastError();
#endregion DLLImport
/// <summary>
/// 应用程序入口.
/// </summary>
[STAThread]
static
void
Main(
string
[] args)
{
string
svcPath;
string
svcName;
string
svcDispName;
//服务程序的路径
svcPath = @
"C:/MyService.exe"
;
svcDispName=
"MyService"
;
svcName=
"MyService"
;
ServiceInstaller c =
new
ServiceInstaller();
c.InstallService(svcPath, svcName, svcDispName);
Console.Read();
}
/// <summary>
/// 安装和运行
/// </summary>
/// <param name="svcPath">程序路径.</param>
/// <param name="svcName">服务名</param>
/// <param name="svcDispName">服务显示名称.</param>
/// <returns>服务安装是否成功.</returns>
public
bool
InstallService(
string
svcPath,
string
svcName,
string
svcDispName)
{
#region Constants declaration.
int
SC_MANAGER_CREATE_SERVICE = 0x0002;
int
SERVICE_WIN32_OWN_PROCESS = 0x00000010;
//int SERVICE_DEMAND_START = 0x00000003;
int
SERVICE_ERROR_NORMAL = 0x00000001;
int
STANDARD_RIGHTS_REQUIRED = 0xF0000;
int
SERVICE_QUERY_CONFIG = 0x0001;
int
SERVICE_CHANGE_CONFIG = 0x0002;
int
SERVICE_QUERY_STATUS = 0x0004;
int
SERVICE_ENUMERATE_DEPENDENTS = 0x0008;
int
SERVICE_START =0x0010;
int
SERVICE_STOP =0x0020;
int
SERVICE_PAUSE_CONTINUE =0x0040;
int
SERVICE_INTERROGATE =0x0080;
int
SERVICE_USER_DEFINED_CONTROL =0x0100;
int
SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |
SERVICE_QUERY_CONFIG |
SERVICE_CHANGE_CONFIG |
SERVICE_QUERY_STATUS |
SERVICE_ENUMERATE_DEPENDENTS |
SERVICE_START |
SERVICE_STOP |
SERVICE_PAUSE_CONTINUE |
SERVICE_INTERROGATE |
SERVICE_USER_DEFINED_CONTROL);
int
SERVICE_AUTO_START = 0x00000002;
#endregion Constants declaration.
try
{
IntPtr sc_handle = OpenSCManager(
null
,
null
,SC_MANAGER_CREATE_SERVICE);
if
(sc_handle.ToInt32() != 0)
{
IntPtr sv_handle = CreateService(sc_handle,svcName,svcDispName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,svcPath,
null
,0,
null
,
null
,
null
);
if
(sv_handle.ToInt32() ==0)
{
CloseServiceHandle(sc_handle);
return
false
;
}
else
{
//试尝启动服务
int
i = StartService(sv_handle,0,
null
);
if
(i==0)
{
return
false
;
}
CloseServiceHandle(sc_handle);
return
true
;
}
}
else
return
false
;
}
catch
(Exception e)
{
throw
e;
}
}
/// <summary>
/// 反安装服务.
/// </summary>
/// <param name="svcName">服务名.</param>
public
bool
UnInstallService(
string
svcName)
{
int
GENERIC_WRITE = 0x40000000;
IntPtr sc_hndl = OpenSCManager(
null
,
null
,GENERIC_WRITE);
if
(sc_hndl.ToInt32() !=0)
{
int
DELETE = 0x10000;
IntPtr svc_hndl = OpenService(sc_hndl,svcName,DELETE);
if
(svc_hndl.ToInt32() !=0)
{
int
i = DeleteService(svc_hndl);
if
(i != 0)
{
CloseServiceHandle(sc_hndl);
return
true
;
}
else
{
CloseServiceHandle(sc_hndl);
return
false
;
}
}
else
return
false
;
}
else
return
false
;
}
}
}
System;
using
System.Runtime.InteropServices;
namespace
MyServiceInstaller
{
class
ServiceInstaller
{
#region Private Variables
private
string
_servicePath;
private
string
_serviceName;
private
string
_serviceDisplayName;
#endregion Private Variables
#region DLLImport
[DllImport(
"advapi32.dll"
)]
public
static
extern
IntPtr OpenSCManager(
string
lpMachineName,
string
lpSCDB,
int
scParameter);
[DllImport(
"Advapi32.dll"
)]
public
static
extern
IntPtr CreateService(IntPtr SC_HANDLE,
string
lpSvcName,
string
lpDisplayName,
int
dwDesiredAccess,
int
dwServiceType,
int
dwStartType,
int
dwErrorControl,
string
lpPathName,
string
lpLoadOrderGroup,
int
lpdwTagId,
string
lpDependencies,
string
lpServiceStartName,
string
lpPassword);
[DllImport(
"advapi32.dll"
)]
public
static
extern
void
CloseServiceHandle(IntPtr SCHANDLE);
[DllImport(
"advapi32.dll"
)]
public
static
extern
int
StartService(IntPtr SVHANDLE,
int
dwNumServiceArgs,
string
lpServiceArgVectors);
[DllImport(
"advapi32.dll"
,SetLastError=
true
)]
public
static
extern
IntPtr OpenService(IntPtr SCHANDLE,
string
lpSvcName,
int
dwNumServiceArgs);
[DllImport(
"advapi32.dll"
)]
public
static
extern
int
DeleteService(IntPtr SVHANDLE);
[DllImport(
"kernel32.dll"
)]
public
static
extern
int
GetLastError();
#endregion DLLImport
/// <summary>
/// 应用程序入口.
/// </summary>
[STAThread]
static
void
Main(
string
[] args)
{
string
svcPath;
string
svcName;
string
svcDispName;
//服务程序的路径
svcPath = @
"C:/MyService.exe"
;
svcDispName=
"MyService"
;
svcName=
"MyService"
;
ServiceInstaller c =
new
ServiceInstaller();
c.InstallService(svcPath, svcName, svcDispName);
Console.Read();
}
/// <summary>
/// 安装和运行
/// </summary>
/// <param name="svcPath">程序路径.</param>
/// <param name="svcName">服务名</param>
/// <param name="svcDispName">服务显示名称.</param>
/// <returns>服务安装是否成功.</returns>
public
bool
InstallService(
string
svcPath,
string
svcName,
string
svcDispName)
{
#region Constants declaration.
int
SC_MANAGER_CREATE_SERVICE = 0x0002;
int
SERVICE_WIN32_OWN_PROCESS = 0x00000010;
//int SERVICE_DEMAND_START = 0x00000003;
int
SERVICE_ERROR_NORMAL = 0x00000001;
int
STANDARD_RIGHTS_REQUIRED = 0xF0000;
int
SERVICE_QUERY_CONFIG = 0x0001;
int
SERVICE_CHANGE_CONFIG = 0x0002;
int
SERVICE_QUERY_STATUS = 0x0004;
int
SERVICE_ENUMERATE_DEPENDENTS = 0x0008;
int
SERVICE_START =0x0010;
int
SERVICE_STOP =0x0020;
int
SERVICE_PAUSE_CONTINUE =0x0040;
int
SERVICE_INTERROGATE =0x0080;
int
SERVICE_USER_DEFINED_CONTROL =0x0100;
int
SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |
SERVICE_QUERY_CONFIG |
SERVICE_CHANGE_CONFIG |
SERVICE_QUERY_STATUS |
SERVICE_ENUMERATE_DEPENDENTS |
SERVICE_START |
SERVICE_STOP |
SERVICE_PAUSE_CONTINUE |
SERVICE_INTERROGATE |
SERVICE_USER_DEFINED_CONTROL);
int
SERVICE_AUTO_START = 0x00000002;
#endregion Constants declaration.
try
{
IntPtr sc_handle = OpenSCManager(
null
,
null
,SC_MANAGER_CREATE_SERVICE);
if
(sc_handle.ToInt32() != 0)
{
IntPtr sv_handle = CreateService(sc_handle,svcName,svcDispName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,svcPath,
null
,0,
null
,
null
,
null
);
if
(sv_handle.ToInt32() ==0)
{
CloseServiceHandle(sc_handle);
return
false
;
}
else
{
//试尝启动服务
int
i = StartService(sv_handle,0,
null
);
if
(i==0)
{
return
false
;
}
CloseServiceHandle(sc_handle);
return
true
;
}
}
else
return
false
;
}
catch
(Exception e)
{
throw
e;
}
}
/// <summary>
/// 反安装服务.
/// </summary>
/// <param name="svcName">服务名.</param>
public
bool
UnInstallService(
string
svcName)
{
int
GENERIC_WRITE = 0x40000000;
IntPtr sc_hndl = OpenSCManager(
null
,
null
,GENERIC_WRITE);
if
(sc_hndl.ToInt32() !=0)
{
int
DELETE = 0x10000;
IntPtr svc_hndl = OpenService(sc_hndl,svcName,DELETE);
if
(svc_hndl.ToInt32() !=0)
{
int
i = DeleteService(svc_hndl);
if
(i != 0)
{
CloseServiceHandle(sc_hndl);
return
true
;
}
else
{
CloseServiceHandle(sc_hndl);
return
false
;
}
}
else
return
false
;
}
else
return
false
;
}
}
}
相关文章推荐
- 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它的解决
- 不使用installutil.exe安装WINDOWS服务
- 不使用installutil.exe安装WINDOWS服务
- 不使用installutil.exe安装WINDOWS服务
- 使用.NET Framework提供的InstallUtil.exe安装Windows服务安装时遇到的2种常见错误
- 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它
- 使用InstallUtil.exe安装Windows服务
- 用vs命令提示符来使用 Installutil.exe来安装和卸载Windows服务
- 无法从命令行或调试器启动服务。必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它。
- 不使用installutil.exe安装WINDOWS服务
- 用vs命令提示符来使用 Installutil.exe来安装和卸载Windows服务
- 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它,
- 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它,
- 不使用installutil.exe安装WINDOWS服务
- 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它的解决
- 无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe),然后用ServerExplorer、Windows服务器管理工具或NET START命令启动它
- 不使用installutil.exe安装WINDOWS服务
- 不使用installutil.exe安装WINDOWS服务.
- C#程序安装.net服务(不使用InstallUtil.exe)
- .Net环境下,使用installutil.exe注册、删除windows服务