`
- 浏览:
460167 次
- 性别:
- 来自:
北京
-
-
using
System;
-
using
System.Configuration.Install;
-
using
System.Collections;
-
using
System.Collections.Specialized;
-
-
IDictionary stateSaver = new
Hashtable();
-
一、安装服务:
-
private
void
InstallService(IDictionary stateSaver,
string
filepath)
-
-
{
-
-
try
-
-
{
-
-
System.ServiceProcess.ServiceController service = new
System.ServiceProcess.ServiceController(
"ServiceName"
);
-
-
if
(!ServiceIsExisted(
"ServiceName"
))
-
-
{
-
-
-
-
AssemblyInstaller myAssemblyInstaller = new
AssemblyInstaller();
-
-
myAssemblyInstaller.UseNewContext = true
;
-
-
myAssemblyInstaller.Path =filepath;
-
-
myAssemblyInstaller.Install(stateSaver);
-
-
myAssemblyInstaller.Commit(stateSaver);
-
-
myAssemblyInstaller.Dispose();
-
-
-
-
service.Start();
-
-
}
-
-
else
-
-
{
-
-
if
(service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
-
-
{
-
-
service.Start();
-
-
}
-
-
}
-
-
}
-
-
catch
(Exception ex)
-
-
{
-
-
throw
new
Exception(
"installServiceError\n"
+ ex.Message);
-
-
}
-
-
}
-
-
或者
-
-
-
-
-
-
-
public
static
string
InsertService(
string
p_Path,
ref
string
p_ServiceName)
-
{
-
if
(!File.Exists(p_Path))
return
"文件不存在!"
;
-
p_ServiceName = ""
;
-
FileInfo _InsertFile = new
FileInfo(p_Path);
-
IDictionary _SavedState = new
Hashtable();
-
try
-
{
-
-
AssemblyInstaller _AssemblyInstaller = new
AssemblyInstaller(p_Path,
new
string
[] {
"/LogFile="
+ _InsertFile.DirectoryName +
"\\" + _InsertFile.Name.Substring(0, _InsertFile.Name.Length - _InsertFile.Extension.Length) + "
.log" });
-
_AssemblyInstaller.UseNewContext = true
;
-
_AssemblyInstaller.Install(_SavedState);
-
_AssemblyInstaller.Commit(_SavedState);
-
Type[] _TypeList = _AssemblyInstaller.Assembly.GetTypes();
-
for
(
int
i = 0; i != _TypeList.Length; i++)
-
{
-
if
(_TypeList[i].BaseType.FullName ==
"System.Configuration.Install.Installer"
)
-
{
-
-
object
_InsertObject = System.Activator.CreateInstance(_TypeList[i]);
-
FieldInfo[] _FieldList = _TypeList[i].GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
-
for
(
int
z = 0; z != _FieldList.Length; z++)
-
{
-
if
(_FieldList[z].FieldType.FullName ==
"System.ServiceProcess.ServiceInstaller"
)
-
{
-
object
_ServiceInsert = _FieldList[z].GetValue(_InsertObject);
-
if
(_ServiceInsert !=
null
)
-
{
-
p_ServiceName = ((ServiceInstaller)_ServiceInsert).ServiceName;
-
return
""
;
-
}
-
}
-
}
-
}
-
}
-
return
""
;
-
}
-
catch
(Exception ex)
-
{
-
return
ex.Message;
-
}
-
}
-
-
二、卸载windows服务:
-
-
private
void
UnInstallService(
string
filepath)
-
-
{
-
-
try
-
-
{
-
-
if
(ServiceIsExisted(
"ServiceName"
))
-
-
{
-
-
-
-
AssemblyInstaller myAssemblyInstaller = new
AssemblyInstaller();
-
-
myAssemblyInstaller.UseNewContext = true
;
-
-
myAssemblyInstaller.Path = filepath;
-
-
myAssemblyInstaller.Uninstall(null
);
-
-
myAssemblyInstaller.Dispose();
-
-
}
-
-
}
-
-
catch
(Exception ex)
-
-
{
-
-
throw
new
Exception(
"unInstallServiceError\n"
+ ex.Message);
-
-
}
-
-
}
-
-
三、判断window服务是否存在:
-
-
private
bool
ServiceIsExisted(
string
serviceName)
-
-
{
-
-
ServiceController[] services = ServiceController.GetServices();
-
-
foreach
(ServiceController s
in
services)
-
-
{
-
-
if
(s.ServiceName == serviceName)
-
-
{
-
-
return
true
;
-
-
}
-
-
}
-
-
return
false
;
-
-
}
-
-
四、启动服务:
-
-
private
void
StartService(
string
serviceName)
-
-
{
-
-
if
(ServiceIsExisted(serviceName))
-
-
{
-
-
System.ServiceProcess.ServiceController service = new
System.ServiceProcess.ServiceController(serviceName);
-
-
if
(service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
-
-
{
-
-
service.Start();
-
-
for
(
int
i = 0; i < 60; i++)
-
-
{
-
-
service.Refresh();
-
-
System.Threading.Thread.Sleep(1000);
-
-
if
(service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
-
-
{
-
-
break
;
-
-
}
-
-
if
(i == 59)
-
-
{
-
-
throw
new
Exception(startServiceError.Replace(
"$s$"
, serviceName));
-
-
}
-
-
}
-
-
}
-
-
}
-
-
}
-
另外方法
-
-
-
-
-
-
public
static
bool
ServiceStart(
string
serviceName)
-
{
-
try
-
{
-
ServiceController service = new
ServiceController(serviceName);
-
if
(service.Status == ServiceControllerStatus.Running)
-
{
-
return
true
;
-
}
-
else
-
{
-
TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 10);
-
-
service.Start();
-
-
-
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
-
}
-
}
-
catch
-
{
-
-
return
false
;
-
}
-
return
true
;
-
-
}
-
-
五、停止服务:
-
-
private
void
StopService(
string
serviceName)
-
-
{
-
-
if
(ServiceIsExisted(serviceName))
-
-
{
-
-
System.ServiceProcess.ServiceController service = new
System.ServiceProcess.ServiceController(serviceName);
-
-
if
(service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
-
-
{
-
-
service.Stop();
-
-
for
(
int
i = 0; i < 60; i++)
-
-
{
-
-
service.Refresh();
-
-
System.Threading.Thread.Sleep(1000);
-
-
if
(service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
-
-
{
-
-
break
;
-
-
}
-
-
if
(i == 59)
-
-
{
-
-
throw
new
Exception(stopServiceError.Replace(
"$s$"
, serviceName));
-
-
}
-
-
}
-
-
}
-
-
}
-
-
}
-
另外一方法:
-
-
-
-
-
-
public
static
bool
ServiceStop(
string
serviseName)
-
{
-
try
-
{
-
ServiceController service = new
ServiceController(serviseName);
-
if
(service.Status == ServiceControllerStatus.Stopped)
-
{
-
return
true
;
-
}
-
else
-
{
-
TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 10);
-
service.Stop();
-
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
-
}
-
}
-
catch
-
{
-
-
return
false
;
-
}
-
return
true
;
-
}
-
六 修改服务的启动项
-
-
-
-
-
-
-
public
static
bool
ChangeServiceStartType(
int
startType,
string
serviceName)
-
{
-
try
-
{
-
RegistryKey regist = Registry.LocalMachine;
-
RegistryKey sysReg = regist.OpenSubKey("SYSTEM"
);
-
RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet"
);
-
RegistryKey services = currentControlSet.OpenSubKey("Services"
);
-
RegistryKey servicesName = services.OpenSubKey(serviceName, true
);
-
servicesName.SetValue("Start"
, startType);
-
}
-
catch
(Exception ex)
-
{
-
-
return
false
;
-
}
-
return
true
;
-
-
-
}
-
-
七 获取服务启动类型
-
-
-
-
-
-
public
static
string
GetServiceStartType(
string
serviceName)
-
{
-
-
try
-
{
-
RegistryKey regist = Registry.LocalMachine;
-
RegistryKey sysReg = regist.OpenSubKey("SYSTEM"
);
-
RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet"
);
-
RegistryKey services = currentControlSet.OpenSubKey("Services"
);
-
RegistryKey servicesName = services.OpenSubKey(serviceName, true
);
-
return
servicesName.GetValue(
"Start"
).ToString();
-
}
-
catch
(Exception ex)
-
{
-
-
return
string
.Empty;
-
}
-
-
}
-
-
八 验证服务是否启动 服务是否存在
-
-
-
-
-
public
static
bool
ServiceIsRunning(
string
serviceName)
-
{
-
ServiceController service = new
ServiceController(serviceName);
-
if
(service.Status == ServiceControllerStatus.Running)
-
{
-
return
true
;
-
}
-
else
-
{
-
return
false
;
-
}
-
}
-
-
-
-
-
-
-
public
static
bool
ServiceExist(
string
serviceName)
-
{
-
try
-
{
-
string
m_ServiceName = serviceName;
-
ServiceController[] services = ServiceController.GetServices();
-
foreach
(ServiceController s
in
services)
-
{
-
if
(s.ServiceName.ToLower() == m_ServiceName.ToLower())
-
{
-
return
true
;
-
}
-
}
-
return
false
;
-
}
-
catch
(Exception ex)
-
{
-
return
false
;
-
}
-
}
-
注:手动安装window服务的方法:
-
-
在“Visual Studio 2005 命令提示”窗口中,运行:
-
-
安装服务:installutil servicepath
-
-
卸除服务:installutil /u servicepath
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
用C#代码实现:服务安装、卸载、启动、停止等基本操作
C# 安装卸载启动停止Windows 服务示例:包含服务和GUI,另外还提供可配置的Windows服务。
用C#实现安装、卸载、启动、暂停、停止windows service, 源码
如题如题如题如题如题如题如题如题如题如题如题如题
C# 对Windows服务做简单控制,安装/卸载,启动/停止;需要在配置文件中指定服务名称与程序路径
C#卸载u盘源码 经测试可以完全卸载u盘 用到的API:CreateFile 创建设备句柄 DeviceIOControl进行设备操作 网上的例子找了一堆 太麻烦 这个是从codeproject下载来的小类 也可以进行扩展
C# 开机启动服务(windows service) 本程序用ASP.NET C#开发,不针对系统版本限制。 本源码拿就来可以直接写您想要的服务,无需再改其它的代码,拿来主义是不是很好?例如订单服务。 本服务是100%源码,源码中包含: ...
程序演示了如何通过代码(不使用InstallUtil.exe)来对C#开发的Windows系统服务程序进行安装和卸载,使用了单独编写的安装程序,安装和卸载在线程中进行,带进度条,界面不锁死。 代码中的解决方案包括2个项目:...
C#也提供了实现动态卸载DLL的方法,通过AppDomain来实现。AppDomain是一个独立执行应用程序的环境,当AppDomain被卸载的时候,在该环境中的所有资源也将被回收。
C#打包需要的卸载文件.rar C#打包需要的卸载文件.rar C#打包需要的卸载文件.rar C#打包需要的卸载文件.rar C#打包需要的卸载文件.rar
在需要安装的项目文件中添加WindowsService项目的引用,在程序集中获取Service.exe的路径,使用 AssemblyInstaller...在卸载时,使用ServiceController判断Service是否在运行,如果在运行,则先停止该服务,然后再卸载
C# 界面化 UI 实现window服务 的安装、启用、停用、卸载 window服务安装方式 比较鸡肋,网上也没有像样的界面化安装方式,自己实现了个 winForm 界面还是很美观的,工具很实用,特别是经常接触window服务的
c#程序开发的 windows service,代码逻辑清晰,服务的安装,卸载,重新安装,都由winform窗体程序控制,并开放Wcf接口,可以随时查看服务运行情况。
VS2005安装与卸载制作 C#安装与卸载制作 VS2005安装与卸载制作 C#安装与卸载制作
winform程序自定义操作安装,卸载安装包制作详解, 程序卸载的时候保留某些文件
用C#实现控制windows 服务的安装、卸载、启动、暂停、重启服务等功能, 运行时大家要以管理员权限运行此软件。本人在此工具中还加了进度条界面显示友好。附程序源码
C#程序 有时候我们的软件需要检测电脑中是否已经启动某个数据库,如MySQl Server,若是没启动,则自动启动之。 可以启动和停止某个Windows服务 如MySQL服务器、Oracle等
C# Windows服务安装、卸载批处理代码.txt
c#获取win服务的路径和安装卸载服务c#获取win服务的路径和安装卸载服务