- 浏览: 264130 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
niuqiang2008:
晕 ...
Session Management -
olived:
你这是javascrpit代码么
固定表头列头Javascript代码 -
xypcn:
你这个不是太全,按你这个我没配起来,自己总结如下:http:/ ...
Zend Optimizer 3.3.9 安装 -
godsmell:
感谢分享。
Sybase在Dbvisualizer中出现乱码解决 -
cdefg198:
具体怎么去实现呢,看到是好,但是不会这么做哦
纯css网页特效实力
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"))
{
//Install Service
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true;
myAssemblyInstaller.Path =filepath;
myAssemblyInstaller.Install(stateSaver);
myAssemblyInstaller.Commit(stateSaver);
myAssemblyInstaller.Dispose();
//--Start Service
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);
}
}
或者
/// <summary>
/// 安装服务
/// </summary>
/// <param name="p_Path">指定服务文件路径</param>
/// <param name="p_ServiceName">返回安装完成后的服务名</param>
/// <returns>安装信息 正确安装返回""</returns>
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")
{
//找到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"))
{
//UnInstall Service
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));
}
}
}
}
}
另外方法
/// <summary>
/// 启动服务
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
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));
}
}
}
}
}
另外一方法:
/// <summary>
/// 停止服务
/// </summary>
/// <param name="serviseName"></param>
/// <returns></returns>
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;
}
六 修改服务的启动项
/// <summary>
/// 修改服务的启动项 2为自动,3为手动
/// </summary>
/// <param name="startType"></param>
/// <param name="serviceName"></param>
/// <returns></returns>
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;
}
七 获取服务启动类型
/// <summary>
/// 获取服务启动类型 2为自动 3为手动 4 为禁用
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
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;
}
}
八 验证服务是否启动 服务是否存在
/// <summary>
/// 验证服务是否启动
/// </summary>
/// <returns></returns>
public static bool ServiceIsRunning(string serviceName)
{
ServiceController service = new ServiceController(serviceName);
if (service.Status == ServiceControllerStatus.Running)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 服务是否存在
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
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
发表评论
-
C#的XML序列化和反序列化4
2010-10-15 17:02 1630public class People ... -
C#的XML序列化和反序列化3
2010-10-15 17:01 989要序列化的对象的类: [Serializable] p ... -
C#的XML序列化和反序列化2
2010-10-14 09:43 22795.格式化文本内容 ... -
C#的XML序列化和反序列化1
2010-10-14 09:22 30723.1 从可串行化的类中定制XML串行化 1.格式 ... -
c#操作windows服务代码
2010-08-31 10:43 1621//一、安装服务: privat ... -
ClickOnce增量更新的问题
2010-08-30 16:40 2634项目中用到了ClickOnce部署和升级项目,刚开始在测试的过 ... -
转ClickOnce资料集锦
2010-08-24 16:54 1656clickonce集锦 1、clickonce初级 ... -
windows xp管理工具不见了怎么办
2010-08-17 08:39 2718管理工具其实是一个文件夹C:\ProgramData\Micr ... -
关于虚拟目录继承根Web.Config的问题解决办法
2010-06-25 17:52 1706利用配置文件的配置节可以让它不继承父目录的配置文件,如下< ... -
C# 性能优化方面的总结
2010-04-08 18:06 13271 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程 ...
相关推荐
C#创建Windows服务(代码+说明文档)
C#操作Windows Xp系统 C#操作Windows Xp系统 C#操作Windows Xp系统 C#操作Windows Xp系统 C#操作Windows Xp系统 C#操作Windows Xp系统
一、开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NET版本:.NET Framework 4.0 目标平台:X86 附件为具体详细代码可借鉴
C#编写Windows服务程序图文教程,一定要按照里面的步骤进行操作,不然服务不一定能过正常运行
国外牛人写的C# 操作Windows Mobile (camera)照相机
这里图文解释了如何使用C#开发Windows服务的基本操作,不会使用的可以看看
利用 Windows API 32 中打印函数,对打印机进行发送打印任务、暂停、取消、获取打印任务、获取打印机列表、状态、纸张等信息。压缩包中包含4个平时收集的打印类,测试均可用。附含Windows API 函数 for Visual Basic...
用于安装c#写的windows服务程序,使用winform写的,操作方便,只需修改config配置文件相关信息既可使用。
C# 用于操作Windows INI 文件的封装类
c#开发windows设备管理器,能够直接运行
C#调用Windows API获取和修改时区,C#提升进程修改时区的权限
作为初学者来说,在C#中使用API确是一件令人头疼的问题。在使用API之间你必须知道如何在C#中使用结构、类型转换、安全/不安全代码,可控/不可控代码等许多知识。 一切从简单开始,复杂的大家一时不能接受。我们...
C#编写的简单Windows服务项目(WindowsService) C#编写的对Windows服务进行安装、卸载与共它操作的项目(WindowsService.UI) 文件夹中还包括运用bat文件,进行安装与卸载
C# windows系统服务Demo 比较基础的操作,作为备忘
C# 实现Windows自动关机、重启、注销、待机和休眠
C#程序 有时候我们的软件需要检测电脑中是否已经启动某个数据库,如MySQl Server,若是没启动,则自动启动之。 可以启动和停止某个Windows服务 如MySQL服务器、Oracle等
基于C# .net2.0(studio2005)Windows服务创建、安装、进行管理操作--(远程与本地启动或停止或重新启动windows服务),完整功能套装实现代码
windows mobile c# 操作sql数据库
修改如下:条理更清晰 1,添加标识number:是否输入了操作数; 2,标识choose:是否输入了操作符 3,标识opMain:输入了什么操作符;... 6, 操作数2mainNum2:存储第二格操作数。 右下角还有C#资料
在很多应用中需要做windows服务来操作数据库等操作,文章教授大家如何快速的使用C#开发windows服务程序