1.在“开始→运行”中键入“regedit.exe”,打开“注册表编辑器”,展开分支“HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services”,在右侧窗格中显示的就是本机安装的服务项。
2.如果要新建服务,只须点击“编辑→新建→项”,然后为此项命名,如“test”;然后右击该项蔽型唤,选择“新建→字符串值”或“新建→dword值”即可。添加一个服务项目具体需要添加的键值如下:
“DisplayName”,字符串值,对应服务名称;
“Description”,字符串值,对应服务描述;
“ImagePath”,字符串值,对应该服务程序所在的路径;
“ObjectName”,字符串值,值为“Localsystem”,表示本地登录;
“ErrorControl”,dword值,值为“1”;
“Start”,dword值,值为2表示自动运行,值为3表示手动运行,值为4表示禁止;
“Type”,dword值,应用程序对应10,其它对应20。
3.还要在“test”项下新建一个“Enum”项。按照宏凯以上步骤添加qq程序为服务,重新启动计算机后,打开“服务”窗口,就可以看到刚才添加的qq服务。
4.如果要删除某项服务,只要删除注册表的中相关键值即可,本租橘例中要删除qq服务,直接删除“HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\test”分支即可。
很多开机启动程序仅咐型辩仅加在启动项里面,只有登陆后才真正启动。windows服务在开机未进行用户登录前就启动了。正是利用这一点,解决一些服务器自动重启后特定软件也自动启动的问题。1.新建一个服务项目 visual C#----windows----windows服务;
2.添加一个dataset(.xsd),用于存储启动目标的路径,日志路径等。
在dataset可视化编辑中,添加一个datatable,包含两列 StartAppPath 和 LogFilePath。分别用于存储目标的路径、日志路径。
*我认为利用dataset.xsd存储配置参数的优势在于可以忽略xml解析的具体过程直接使用xml文件。
在dataset中 提供了ReadXml方法用于读取xml文件并将其转换成内存中的一张datatable表,数据很容易取出来!同样,WriteXml方法用租手于存储为xml格式的文件,也仅仅需要一句话而已。
3. program.cs文件 作为程序入口,代码如下:
view plaincopy to clipboardprint?
using System.Collections.Generic
using System.ServiceProcess
using System.Text
namespace WindowsServices_AutoStart
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun
// 同一进程中可以运行多个用户服务。若要将
// 另一衡缺个服务添加到此进程中,请更改下行以
// 创建另一个服务对象。例如,
//
// ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()}
//
ServicesToRun = new ServiceBase[] { new WindowsServices_AutoStart() }
ServiceBase.Run(ServicesToRun)
}
}
}
using System.Collections.Generic
using System.ServiceProcess
using System.Text
namespace WindowsServices_AutoStart
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun
// 同一进程中可以运行多个用户服务。若要将
// 另一个服务添加到此进程中,请更改下行以
// 创建另一个服务对象。例如,
//
// ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()}
//
ServicesToRun = new ServiceBase[] { new WindowsServices_AutoStart() }
ServiceBase.Run(ServicesToRun)
}
}
}
4.service.cs主文件,代码如下:
using System
using System.Collections.Generic
using System.ComponentModel
using System.Data
using System.IO
using System.Diagnostics
using System.ServiceProcess
using System.Text
namespace WindowsServices_AutoStart
{
public partial class WindowsServices_AutoStart : ServiceBase
{
public WindowsServices_AutoStart()
{
InitializeComponent()
}
string StartAppPath =""//@"F:\00.exe"
string LogFilePath =""// @"f:\WindowsService.txt"
protected override void OnStart(string[] args)
{
string exePath = System.Threading.Thread.GetDomain().BaseDirectory
//
if (!File.Exists(exePath + @"\ServiceAppPath.xml"))
{
dsAppPath ds = new dsAppPath()
object[] obj=new object[2]
obj[0]="0"
obj[1]="0"
ds.Tables["dtAppPath"].Rows.Add(obj)
ds.Tables["dtAppPath"].WriteXml(exePath + @"\ServiceAppPath.xml")
return
}
try
{
dsAppPath ds = new dsAppPath()
ds.Tables["dtAppPath"].ReadXml(exePath + @"\ServiceAppPath.xml")
DataTable dt = ds.Tables["dtAppPath"]
StartAppPath = dt.Rows[0]["StartAppPath"].ToString()
LogFilePath = dt.Rows[0]["LogFilePath"].ToString()
}
catch { return}
if (File.Exists(StartAppPath))
{
try
{
Process proc = new Process()
proc.StartInfo.FileName = StartAppPath//注意路径
//proc.StartInfo.Arguments = ""
proc.Start()
}
catch (System.Exception ex)
{
//MessageBox.Show(this, "找不到帮助文件路径。文件是否被改动或删除?\n" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
}
FileStream fs = new FileStream(LogFilePath, FileMode.OpenOrCreate, FileAccess.Write)
StreamWriter m_streamWriter = new StreamWriter(fs)
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End)
m_streamWriter.WriteLine("WindowsService: Service Started" + DateTime.Now.ToString() + "\n")
m_streamWriter.Flush()
m_streamWriter.Close()
fs.Close()
}
}
protected override void OnStop()
{
try
{
// TODO: 在此处添加代码以执行停止服务所需的关闭 *** 作。
FileStream fs = new FileStream(LogFilePath, FileMode.OpenOrCreate, FileAccess.Write)
StreamWriter m_streamWriter = new StreamWriter(fs)
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End)
m_streamWriter.WriteLine("WindowsService: Service Stopped " + DateTime.Now.ToString() + "\n")
m_streamWriter.Flush()
m_streamWriter.Close()
fs.Close()
}
catch
{
}
}
}
}
5.启动调试,成功时也会d出一个对话框大致意思是提示服务需要安装。
6.把Debug文件夹下面的.exe执行程序,安装为windows系统服务,安装方法网上很多介绍。我说一种常用的:
安装服务
访问项目中的已编译可执行文件所在的目录。
用项目的输出作为参数,从命令行运行 InstallUtil.exe。在命令行中输入下列代码:
installutil yourproject.exe
卸载服务
用项目的输出作为参数,从命令行运行 InstallUtil.exe。
installutil /u yourproject.exe
至此,整个服务已经编写,编译,安装完成,你可以在控制面板的管理工具的服务中,看到你编写的服务。
7.安装好了之后在系统服务列表中可以管理服务,这时要注意将服务的属性窗口----登陆----“允许于桌面交互”勾选!这样才能在启动了你要的目标程序后不单单存留于进程。在桌面上也看得到。
8.关于卸载服务,目前有两个概念:一是禁用而已;一是完全删除服务。 前者可以通过服务管理窗口直接完成。后者则需要进入注册表“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”找到服务名称的文件夹,整个删掉,重新启动电脑后,服务消失。
9.扩展思考:经过修改代码,还可以实现:启动目标程序之前,检测进程中是否存在目标程序,存在则不再次启动
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)