您的位置:首页 > 其它

不使用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
;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐