- 浏览: 270111 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1666public class People ... -
C#的XML序列化和反序列化3
2010-10-15 17:01 1025要序列化的对象的类: [Serializable] p ... -
C#的XML序列化和反序列化2
2010-10-14 09:43 23275.格式化文本内容 ... -
C#的XML序列化和反序列化1
2010-10-14 09:22 31083.1 从可串行化的类中定制XML串行化 1.格式 ... -
c#操作windows服务代码
2010-08-31 10:43 1645//一、安装服务: privat ... -
ClickOnce增量更新的问题
2010-08-30 16:40 2658项目中用到了ClickOnce部署和升级项目,刚开始在测试的过 ... -
转ClickOnce资料集锦
2010-08-24 16:54 1685clickonce集锦 1、clickonce初级 ... -
windows xp管理工具不见了怎么办
2010-08-17 08:39 2748管理工具其实是一个文件夹C:\ProgramData\Micr ... -
关于虚拟目录继承根Web.Config的问题解决办法
2010-06-25 17:52 1738利用配置文件的配置节可以让它不继承父目录的配置文件,如下< ... -
C# 性能优化方面的总结
2010-04-08 18:06 13591 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程 ...
相关推荐
### C# 创建 Windows 服务:实现系统定时重启功能 在 IT 领域,Windows 服务(Windows Services)是后台运行的应用程序,它们为用户提供了一系列关键功能,如网络连接、打印服务等。与传统的应用程序不同,Windows ...
Windows服务是Windows操作系统中的一个重要组成部分,它们通常用于执行长时间运行的任务,如数据备份、监控系统状态或自动化任务。与常规应用程序不同,服务具有独立于用户会话的生命周期,并且可以设定为自动启动,...
2. 选择"Windows服务"模板。 3. 在设计视图中,从工具箱中拖放一个Timer组件(确保从组件列表而非Windows窗体列表中选取)。 4. 设置Timer的属性,例如Enabled设为False,Interval设为30000毫秒(即30秒)。 5. 切换...
C#是一种强大的编程语言,它允许开发者与Windows API交互,从而获取并操作这些系统服务的信息。本文将深入探讨如何使用C#来获取Windows系统的服务信息。 首先,我们需要引入`System.ServiceProcess`命名空间,这个...
2. **Windows 服务与Form交互**: 虽然Windows服务通常在没有用户界面的背景下运行,但通过使用`ServiceController`类,我们可以从一个Windows Forms应用程序(Form)控制服务的状态。例如,可以发送命令启动、停止...
本实例关注的是如何使用C#来创建一个Windows服务,它能够在操作系统启动时自动运行,并执行指定路径下的.exe程序。Windows服务是后台应用程序,它们不依赖用户交互,通常用于执行长期运行的任务或提供系统级别的功能...
【标题】:“C# Windows服务框架” Windows服务框架是一种在Windows操作系统后台运行的应用程序模型,它使得开发者可以创建持续运行的、与用户交互较少的服务。在这个特定的标题中,我们讨论的是一个基于C#编程语言...
在C#编程中,Windows系统服务管理涉及到对操作系统服务的创建、查询、控制以及配置等操作。本项目提供的源代码实现了这些功能,便于开发者在Windows环境下进行系统服务的管理工作。以下将详细介绍源代码中的关键知识...
C#操作Windows Xp系统 C#操作Windows Xp系统 C#操作Windows Xp系统 C#操作Windows Xp系统 C#操作Windows Xp系统 C#操作Windows Xp系统
2. 创建Windows服务项目 使用Visual Studio创建一个新的Windows服务项目,并将其命名为ServiceTest。 3. 添加安装程序 在项目中添加安装程序,并修改安装服务名和安装权限。 4. 写入服务代码 在服务类中,需要继承...
总结来说,"C#实现用托盘控制Windows服务"是一个实用的技术,它结合了Windows服务的管理和系统托盘交互,为用户提供了一种便捷的方式来控制后台服务。通过学习和实践这一技术,开发者能够创建更加灵活且用户友好的...
将 C# 生成的 exe 文件添加到 Windows 服务器的服务需要经过创建 Windows 服务项目、添加安装程序、配置服务安装程序、编写服务代码、编译和安装服务、安装服务、启动服务和卸载服务等步骤。 知识点: * 创建 ...
在本文中,我们将深入探讨如何使用C#语言创建一个简单的Windows服务项目,以及如何通过`Install.bat`和`Uninstall.bat`脚本来安装、启动和停止这个服务。首先,让我们理解Windows服务的基本概念。 **Windows服务**...
Windows服务是Windows操作系统中一种特殊的程序,它们可以在启动后自动运行,并且可以在用户登录或注销时继续运行。服务可以被配置为自动启动、手动启动或禁用,而且它们通常具有自己的账户权限,这使得它们能够访问...
在本文中,我们将深入探讨如何使用C#编程语言创建Windows服务,并结合System.Timers.Timer类实现定时任务。这个实例不仅提供了源代码,还通过截图帮助理解每个步骤,这对于初学者和开发者来说是一份宝贵的资源。 ...
2. **C# 创建Windows服务**:在C#中,我们使用System.ServiceProcess命名空间来创建和管理Windows服务。首先,我们需要创建一个继承自`ServiceBase`类的新类,并重写其中的关键方法,如`OnStart`和`OnStop`。然后,...
2. **C#开发Windows服务** - **ServiceBase类**:C#中的System.ServiceProcess命名空间提供了ServiceBase类,它是创建Windows服务的基础。 - **OnStart()和OnStop()方法**:覆盖这些方法来定义服务启动和停止时的...
在本案例中,“C# Windows服务案例”是一个使用C#编程语言开发的程序,它的主要目的是定时提醒用户保护眼睛。这个服务程序可以被设定在特定的时间间隔自动启动,从而帮助用户养成良好的用眼习惯。 首先,我们需要...
Windows 服务是 Windows 操作系统中的一种特殊类型的应用程序,它可以在后台运行,不需要用户交互,通常用于提供一些公共服务,如打印服务、文件共享服务等。在本文中,我们将使用 C# 语言开发一个简单的 Windows ...