微软官方MSDN原版Win10系统下载

现在位置: 首页  > 系统教程  > 系统帮助

如何调试windows 服务

时间:2024-11-23 05:30:38   

大家好,今天Win10系统之家小编给大家分享「如何调试windows 服务」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!

安泰服务app系列软件最新版本下载

1.如何:调试 Windows 服务应用程序


因为服务必须从服务控制管理器的上下文中运行,而不是从Visual Studio中运行。NET中,调试服务不像调试其他Visual Studio应用程序类型那样简单。若要调试服务,必须首先启动该服务,然后将调试器附加到运行该服务的进程。然后,您可以使用Visual Studio的所有标准调试功能来调试应用程序。

调试OnStart方法可能很困难,因为Windows服务管理器将启动服务的所有尝试限制为

30秒后。调试Windows服务。

安装您的服务。

1.该服务可以从服务控制管理器、“服务器资源管理器”或代码中启动。

2.在Visual Studio中,从“调试”菜单中选择“进程”,会出现“进程”对话框,点击“显示系统进程”。

3.在“可用进程”区域中单击服务的进程,然后单击“附加”。

4.提示此进程将与服务的可执行文件同名,并出现“附加到进程”对话框。

5.选择任何适当的选项,然后单击“确定”关闭对话框。请注意,您现在处于调试模式。

6.设置要在代码中使用的任何断点。

7.访问服务控制管理器并操作服务,发送停止、暂停和继续命令来命中断点。



2.如何调试 Windows 服务


第一方法:

这种方法其实说起来不叫调试,也是一种笨办法,就是用MessageBox把一些程序的中间信息输出来,方便你找出程序是在哪个地方出问题了,你也可以在try catch中使用,用MessageBox把异常弹出来,这种方法也比较直观。可惜,实现起来也有问题。我们首先要添加using System.Windows.Forms;的引用,然后加上一行代码MessageBox.Show(ex.ToString(),"Error");本以为这样说行了,可是把服务重新编译生成,并安装启动后,它并没有弹出框来。

百思不得其解。幸好,在服务的程序里面,启用了系统的日志,它会把相关的异常记录到系统日志中去,在“计算机管理”的“事件查看器”里面可以找到。

clip_image002

显示的信息是

“当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。”

直接百度,找到了一个答案,原来是调用MessageBox时,还需要设置它的MessageBoxOptions属性为DefaultDesktopOnly。修改如下:

MessageBox.Show(ex.ToString(),"Error", MessageBoxButtons.OK, MessageBoxIcon.Information,MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);

然后再次重新编译,安装并启动,OK,顺利的弹出了错误的信息。

第二种方法:

第二种方法就是真正的调试,其实Windows服务还是可以调试的,应该说任何一种类型的程序都应该能调试,别人在开发编译器的时候就人考虑到的。下面来看具体的方法。

我们知道,任何一个程序都有一个对应的进程,如果你的Windows服务启动后,也会有一个对应的进程。通过任务管理器,就能看到。

我们可以通过VS编译器里面,提供的“附加到进程”这个功能来进行调试。首先你打开你的Windows服务源程序,在里面设置一个断点,例如在OnStart方法中protected override void OnStart(string[] args){}中,然后把你的服务启动,启动过后,在VS的“调试”一栏中找到“附加到进程”

clip_image004

在进程列表里面找到你的进程,

clip_image006

如果没有的话,就把左下角的“显示所有用户的进程”前面的勾选中,然后你就可以找到你的Windows服务的进程了,然后点击确定即可。

点击确定后,可能你等了半天,也没看见它命中断点。哈哈,不要急,前面说漏了一点,我们是先启动的服务,然后再附加的进程,因为服务一启动,就会执行OnStart方法,这时,我们还没有把这个服务的进程附加到VS中去呢?所以在OnStart方法中设置的这个断点肯定不会命中。所以我们需要想个办法,也就是加一个定时器,我们在OnStart方法中启动这个定时器,然后设置这个定时器的时间间隔为1分钟,然后在这个定时器的事件中去设置一个断点。

这样把服务重新生成,安装并启动后,把这个进程附加到VS中去,1分钟过后,你就会看到,它命中了断点。不过有一个前提就是,你必须在1分钟内把这个进程附加到VS中去,否则的话,它还是命中不了。

如果还有问题的话,就检查一下,看你的Windows服务是不是在Release模式下生成的,如果是的话,要把它改成在Debug模式下生成。

详细的说明,可以参考这篇文章Windows服务(附服务开发辅助工具)



3.如何用OD调试windows服务程序


第一方法:

这种方法其实说起来不叫调试,也是一种笨办法,就是用messagebox把一些程序的中间信息输出来,方便你找出程序是在哪个地方出问题了,你也可以在try catch中使用,用messagebox把异常弹出来,这种方法也比较直观。可惜,实现起来也有问题。我们首先要添加using system.windows.forms;的引用,然后加上一行代码messagebox.show(ex.tostring(), "error");本以为这样说行了,可是把服务重新编译生成,并安装启动后,它并没有弹出框来。

百思不得其解。幸好,在服务的程序里面,启用了系统的日志,它会把相关的异常记录到系统日志中去,在“计算机管理”的“事件查看器”里面可以找到。

显示的信息是

“当应用程序不是以 userinteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 servicenotification 或 defaultdesktoponly 样式,以显示服务应用程序发出的通知。”

直接百度,找到了一个答案,原来是调用messagebox时,还需要设置它的messageboxoptions属性为defaultdesktoponly。修改如下:

messagebox.show(ex.tostring(), "error", messageboxbuttons.ok, messageboxicon.information, messageboxdefaultbutton.button1, messageboxoptions.defaultdesktoponly);

然后再次重新编译,安装并启动,ok,顺利的弹出了错误的信息。

第二种方法:

第二种方法就是真正的调试,其实windows服务还是可以调试的,应该说任何一种类型的程序都应该能调试,别人在开发编译器的时候就人考虑到的。下面来看具体的方法。

我们知道,任何一个程序都有一个对应的进程,如果你的windows服务启动后,也会有一个对应的进程。通过任务管理器,就能看到。

我们可以通过vs编译器里面,提供的“附加到进程”这个功能来进行调试。首先你打开你的windows服务源程序,在里面设置一个断点,例如在onstart方法中protected override void onstart(string[] args){}中,然后把你的服务启动,启动过后,在vs的“调试”一栏中找到“附加到进程”

在进程列表里面找到你的进程,

如果没有的话,就把左下角的“显示所有用户的进程”前面的勾选中,然后你就可以找到你的windows服务的进程了,然后点击确定即可。

点击确定后,可能你等了半天,也没看见它命中断点。哈哈,不要急,前面说漏了一点,我们是先启动的服务,然后再附加的进程,因为服务一启动,就会执行onstart方法,这时,我们还没有把这个服务的进程附加到vs中去呢?所以在onstart方法中设置的这个断点肯定不会命中。所以我们需要想个办法,也就是加一个定时器,我们在onstart方法中启动这个定时器,然后设置这个定时器的时间间隔为1分钟,然后在这个定时器的事件中去设置一个断点。

这样把服务重新生成,安装并启动后,把这个进程附加到vs中去,1分钟过后,你就会看到,它命中了断点。不过有一个前提就是,你必须在1分钟内把这个进程附加到vs中去,否则的话,它还是命中不了。

如果还有问题的话,就检查一下,看你的windows服务是不是在release模式下生成的,如果是的话,要把它改成在debug模式下生成。



4.windows 2008 服务器怎么调试?


首先一定要把windows7 家庭版升级到旗舰版啊安装啊 家庭版无法 具体的 在博客本文讲述了在Windows7下如何安装IIS7,以及IIS7在安装过程中的一些需要注意的设置,以及在IIS7下配置ASP的正确方法。在Windows7下面IIS7的安装方法:

一、进入Windows7的控制面板,选择左侧的打开或关闭Windows功能。

二、现在出现了安装Windows功能的选项菜单,注意选择的项目,我们需要手动选择需要的功能,下面这张图片把需要安装的服务都已经选择了,大家可以按照图片勾选功能。

三、安装完成后,再次进入控制面板,选择管理工具,双击Internet(IIS)管理器选项,进入IIS设置。

四、现在进入到IIS7控制面板。

五、选择DefaultWebSite,并双击ASP的选项,

六、IIS7中ASP父路径是没有启用的,要开启父路径,选择True,搞定父路径选项。

七、配置IIS7的站点。单击右边的高级设置选项,可以设置网站的目录。

八、点击右侧的绑定...,设置网站的端口。

九、点击默认文档,设置网站的默认文档。

至此,Windows7的IIS7设置已经基本完成了,ASP+Access程序可以调试成功

我可以帮助你,你先设置我最佳答案后,我百度Hii教你。



5.如何创建,安装和调试Windows服务


我们将研究如何创建一个作为Windows服务的应用程序。内容包含什么是Windows服务,如何创建、安装和调试它们。会用到System.ServiceProcess.ServiceBase命名空间的类。


什么是Windows服务?


Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。

Windows 服务,以前的NT服务,都是被作为Windows NT操作系统的一部分引进来的。它们在Windows

9x及Windows Me下没有。你需要使用NT级别的操作系统来运行Windows服务,诸如:Windows NT、Windows

2000 Professional或Windows

2000 Server。举例而言,以Windows服务形式的产品有:Microsoft Exchange、SQL Server,还有别的如设置计算机时钟的Windows Time服务。


创建一个Windows服务

我们即将创建的这个服务除了演示什么也不做。服务被启动时会把一个条目信息登记到一个数据库当中来指明这个服务已经启动了。在服务运行期间,它会在指定的时间间隔内定期创建一个数据库项目记录。服务停止时会创建最后一条数据库记录。这个服务会自动向Windows应用程序日志当中登记下它成功启动或停止时的记录。

Visual Studio .NET能够使创建一个Windows服务变成相当简单的一件事情。启动我们的演示服务程序的说明概述如下。

1.

新建一个项目

2.

从一个可用的项目模板列表当中选择Windows服务

3. 设计器会以设计模式打开

4. 从工具箱的组件表当中拖动一个Timer对象到这个设计表面上(注意: 要确保是从组件列表而不是从Windows窗体列表当中使用Timer)

5. 设置Timer属性,Enabled属性为False,Interval属性30000毫秒

6. 切换到代码视图页(按F7或在视图菜单当中选择代码),然后为这个服务填加功能


Windows服务的构成

在你类后面所包含的代码里,你会注意到你所创建的Windows服务扩充了System.ServiceProcess.Service类。所有以.NET方式建立的Windows服务必须扩充这个类。它会要求你的服务重载下面的方法,Visual Studio默认时包括了这些方法。

Dispose – 清除任何受控和不受控资源(managed and unmanaged resources)

OnStart – 控制服务启动

OnStop – 控制服务停止

数据库表脚本样例

在这个例子中使用的数据库表是使用下面的T-SQL脚本创建的。我选择SQL Server数据库。你可以很容易修改这个例子让它在Access或任何你所选择的别的数据库下运行。

CREATE TABLE [dbo].[MyServiceLog] (

[in_LogId] [int] IDENTITY

(1, 1) NOT NULL,

[vc_Status] [nvarchar]

(40)

COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[dt_Created] [datetime] NOT NULL

) ON [PRIMARY]


Windows服务样例

下面就是我命名为MyService的Windows服务的所有源代码。大多数源代码是由Visual Studio自动生成的。


Code

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Diagnostics;

using System.ServiceProcess;

namespace CodeGuru.MyWindowsService

{

public class MyService : System.ServiceProcess.ServiceBase

{

private System.Timers.Timer timer1;

/// <remarks>

/// Required designer variable.

/// </remarks>

private System.ComponentModel.Container components = null;

public MyService()

{

// This call is required by the Windows.Forms

// Component Designer.

InitializeComponent();

}

// The main entry point for the process

static void Main()

{

System.ServiceProcess.ServiceBase[] ServicesToRun;


ServicesToRun = new System.ServiceProcess.ServiceBase[]

{ new MyService() };

System.ServiceProcess.ServiceBase.Run(ServicesToRun);

}

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.timer1 = new System.Timers.Timer();

((System.ComponentModel.ISupportInitialize)

(this.timer1)).BeginInit();

//

// timer1

//

this.timer1.Interval = 30000;

this.timer1.Elapsed +=

new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);

//

// MyService

//

this.ServiceName = "My Sample Service";

((System.ComponentModel.ISupportInitialize)

(this.timer1)).EndInit();

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

/// <summary>

/// Set things in motion so your service can do its work.

/// </summary>

protected override void OnStart(string[] args)

{

this.timer1.Enabled = true;

this.LogMessage("Service Started");

}


/// <summary>

/// Stop this service.

/// </summary>

protected override void OnStop()

{

this.timer1.Enabled = false;

this.LogMessage("Service Stopped");

}

/*

* Respond to the Elapsed event of the timer control

*/

private void timer1_Elapsed(object sender,

System.Timers.ElapsedEventArgs e)

{

this.LogMessage("Service Running");

}

/*

* Log specified message to database

*/

private void LogMessage(string Message)

{

SqlConnection connection = null;

SqlCommand command = null;

try

{

connection = new SqlConnection(

"Server=localhost;Database=SampleDatabase;Integrated

Security=false;User Id=sa;Password=;");

command = new SqlCommand(

"INSERT INTO MyServiceLog (vc_Status, dt_Created)

VALUES (’" + Message + "’,getdate())", connection);

connection.Open();

int numrows = command.ExecuteNonQuery();

}

catch( Exception ex )

{

System.Diagnostics.Debug.WriteLine(ex.Message);

}

finally

{

command.Dispose();

connection.Dispose();

}

}

}

}

安装Windows服务

Windows服务不同于普通Windows应用程序。不可能简简单单地通过运行一个EXE就启动Windows服务了。

安装一个Windows服务应该通过使用.NET Framework提供的InstallUtil.exe来完成,或者通过诸如一个Microsoft Installer (MSI)这样的文件部署项目完成。


添加服务安装程序

创建一个Windows服务,仅用InstallUtil程序去安装这个服务是不够的。你必须还要把一个服务安装程序添加到你的Windows服务当中,这样便于InstallUtil或是任何别的安装程序知道应用你服务的是怎样的配置设置。

1. 将这个服务程序切换到设计视图

2. 右击设计视图选择“添加安装程序”

3. 切换到刚被添加的ProjectInstaller的设计视图

4. 设置serviceInstaller1组件的属性:

1) ServiceName = My Sample Service

2) StartType = Automatic

5. 设置serviceProcessInstaller1组件的属性

1) Account = LocalSystem

6. 生成解决方案

在完成上面的几个步骤之后,会自动由Visual Studio产生下面的源代码,它包含于ProjectInstaller.cs这个源文件内。


Code

using System;

using System.Collections;

using System.ComponentModel;

using System.Configuration.Install;

namespace CodeGuru.MyWindowsService

{

/// <summary>

/// Summary description for ProjectInstaller.

/// </summary>

[RunInstaller(true)]

public class ProjectInstaller :

System.Configuration.Install.Installer

{

private System.ServiceProcess.ServiceProcessInstaller

serviceProcessInstaller1;

private System.ServiceProcess.ServiceInstaller serviceInstaller1;

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;

public ProjectInstaller()

{

// This call is required by the Designer.

InitializeComponent();

// TODO: Add any initialization after the InitComponent call

}

#region Component Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.serviceProcessInstaller1 = new

System.ServiceProcess.ServiceProcessInstaller();

this.serviceInstaller1 = new

System.ServiceProcess.ServiceInstaller();

//

// serviceProcessInstaller1

//

this.serviceProcessInstaller1.Account =

System.ServiceProcess.ServiceAccount.LocalSystem;

this.serviceProcessInstaller1.Password = null;

this.serviceProcessInstaller1.Username = null;

//

// serviceInstaller1

//

this.serviceInstaller1.ServiceName = "My Sample Service";

this.serviceInstaller1.StartType =

System.ServiceProcess.ServiceStartMode.Automatic;

//

// ProjectInstaller

//

this.Installers.AddRange(new

System.Configuration.Install.Installer[]

{this.serviceProcessInstaller1, this.serviceInstaller1});

}

#endregion

}

}

用InstallUtil安装Windows服务

现在这个服务已经生成,你需要把它安装好才能使用。下面操作会指导你安装你的新服务。

1. 打开Visual Studio .NET命令提示

2. 改变路径到你项目所在的binDebug文件夹位置(如果你以Release模式编译则在binRelease文件夹)

3. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。

4. 右击桌面上“我的电脑”,选择“管理”就可以打计算机管理控制台

5. 在“服务和应用程序”里面的“服务”部分里,你可以发现你的Windows服务已经包含在服务列表当中了

6. 右击你的服务选择启动就可以启动你的服务了

在每次需要修改Windows服务时,这就会要求你卸载和重新安装这个服务。不过要注意在卸载这个服务前,最好确保服务管理控制台已经关闭,这会是一个很好的习惯。如果没有这样操作的话,你可能在卸载和重安装Windows服务时会遇到麻烦。仅卸载服务的话,可以执行相的InstallUtil命令用于注销服务,不过要在后面加一个/u命令开关。


调试Windows服务

从另外的角度度看,调试Windows服务绝不同于一个普通的应用程序。调试Windows服务要求的步骤更多。服务不能象你对普通应用程序做的那样,只要简单地在开发环境下执行就可以调试了。服务必须首先被安装和启动,这一点在前面部分我们已经做到了。为了便于跟踪调试代码,一旦服务被启动,你就要用Visual Studio把运行的进程附加进来(attach)。

记住,对你的Windows服务做的任何修改都要对这个服务进行卸载和重安装。


附加正在运行的Windows服务

为了调试程序,有些附加Windows服务的操作说明。这些操作假定你已经安装了这个Windows服务并且它正在运行。

1. 用Visual Studio装载这个项目

2. 点击“调试”菜单

3. 点击“进程”菜单

4. 确保 显示系统进程 被选

5. 在 可用进程 列表中,把进程定位于你的可执行文件名称上点击选中它

6. 点击 附加 按钮

7. 点击 确定

8. 点击 关闭

9. 在timer1_Elapsed方法里设置一个断点,然后等它执行


总结

现在你应该对Windows服务是什么,以及如何创建、安装和调试它们有一个粗略的认识了。Windows服务的额处的功能你可以自行研究。这些功能包括暂停(OnPause)和恢复(OnContinue)的能力。暂停和恢复的能力在默认情况下没有被启用,要通过Windows服务属性来设置。



6.如何创建、安装和调试Windows服务


内容包含什么是Windows 服务,如何创建、安装和调试它们。会用到System.ServiceProcess.ServiceBase 命名空间的类。 什么是Windows 服务? Windows 服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows 事件日志。

计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控制管理器,Windows 服务是可控的,可以终止、暂停及当需要时启动。 Windows 服务,以前的NT 服务,都是被作为Windows NT 操作系统的一部分引进来的。

9x 及Windows Me 下没有。你需要使用NT 级别的操作系统来运行Windows 服务,诸如:Windows NT、Windows

2000 Professional 或 Windows

2000 Server。举例而言,以 Windows 服务形式的产品有:Microsoft Exchange、SQL Server,还有别的如设置计算机时钟的Windows Time 服务。

创建一个Windows 服务 我们即将创建的这个服务除了演示什么也不做。服务被启动时会把一个条目信息登记到一个数据库当中来指明这个服务已经启动了。在服务运行期间,它会在指定的时间间隔内定期创建一个数据库项目记录。服务停止时会创建最后一条数据库记录。这个服务会自动向Windows 应用程序日志当中登记下它成功启动或停止时的记录。

Visual Studio .NET 能够使创建一个Windows 服务变成相当简单的一件事情。启动我们的演示服务程序的说明概述如下。

1. 新建一个项目

2. 从一个可用的项目模板列表当中选择Windows 服务

3. 设计器会以设计模式打开

4. 从工具箱的组件表当中拖动一个 Timer 对象到这个设计表面上 (注意: 要确保是从组件列表而不是从Windows 窗体列表当中使用Timer)

5. 设置Timer 属性,Enabled 属性为False,Interval 属性30000 毫秒

6. 切换到代码视图页(按F7 或在视图菜单当中选择代码),然后为这个服务填加功能 Windows 服务的构成 在你类后面所包含的代码里,你会注意到你所创建的 Windows 服务扩充了 System.ServiceProcess.Service类。所有以.NET方式建立的Windows服务必须扩充这个类。它会要求你的服务重载下面的方法,Visual Studio 默认时包括了这些方法。

&#xFFFD;6&#xFFFD;1 Dispose – 清除任何受控和不受控资源(managed and unmanaged resources) &#xFFFD;6&#xFFFD;1 OnStart – 控制服务启动 &#xFFFD;6&#xFFFD;1 OnStop – 控制服务停止 数据库表脚本样例 在这个例子中使用的数据库表是使用下面的T-SQL 脚本创建的。

我选择SQL Server 数据库。你可以很容易修改这个例子让它在Access 或任何你所选择的别的数据库下运行。

(1, 1) NOT NULL, [vc_Status] [nvarchar]

(40) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [dt_Created] [datetime] NOT NULL ) ON [PRIMARY] Windows 服务样例 下面就是我命名为 MyService 的 Windows 服务的所有源代码。大多数源代码是由 Visual Studio 自动生成的。

Code usingSystem; usingSystem.Collections; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Data.SqlClient; usingSystem.Diagnostics; usingSystem.ServiceProcess; namespaceCodeGuru.MyWindowsService { publicclassMyService:System.ServiceProcess.ServiceBase { privateSystem.Timers.Timertimer1; ///; ///Requireddesignervariable. ///; privateSystem.ComponentModel.Containercomponents=null; publicMyService() { //ThiscallisrequiredbytheWindows.Forms //ComponentDesigner. InitializeComponent(); } //Themainentrypointfortheprocess staticvoidMain() { System.ServiceProcess.ServiceBase[]ServicesToRun; ServicesToRun=newSystem.ServiceProcess.ServiceBase[] {newMyService()}; System.ServiceProcess.ServiceBase.Run(ServicesToRun); } ///; ///RequiredmethodforDesignersupport-donotmodify ///thecontentsofthismethodwiththecodeeditor. ///; privatevoidInitializeComponent() { this.timer1=newSystem.Timers.Timer(); ((System.ComponentModel.ISupportInitialize) (this.timer1)).BeginInit(); // //timer1 // this.timer1.Interval=30000; this.timer1.Elapsed+= newSystem.Timers.ElapsedEventHandler(this.timer1_Elapsed); // //MyService // this.ServiceName=";MySampleService";; ((System.ComponentModel.ISupportInitialize) (this.timer1)).EndInit(); } ///; ///Cleanupanyresourcesbeingused. ///; protectedoverridevoidDispose(booldisposing) { if(disposing) { if(components!=null) { components.Dispose(); } } base.Dispose(disposing); } ///; ///Setthingsinmotionsoyourservicecandoitswork. ///; protectedoverridevoidOnStart(string[]args) { this.timer1.Enabled=true; this.LogMessage(";ServiceStarted";); } ///; ///Stopthisservice. ///; protectedoverridevoidOnStop() { this.timer1.Enabled=false; this.LogMessage(";ServiceStopped";); } /* *RespondtotheElapsedeventofthetimercontrol */ privatevoidtimer1_Elapsed(objectsender, System.Timers.ElapsedEventArgse) { this.LogMessage(";ServiceRunning";); } /* *Logspecifiedmessagetodatabase */ privatevoidLogMessage(stringMessage) { SqlConnectionconnection=null; SqlCommandcommand=null; try { connection=newSqlConnection( ";Server=localhost;Database=SampleDatabase;Integrated Security=false;UserId=sa;Password=;";); command=newSqlCommand( ";INSERTINTOMyServiceLog(vc_Status,dt_Created) VALUES(’";+Message+";’,getdate())";,connection); connection.Open(); intnumrows=command.ExecuteNonQuery(); } catch(Exceptionex) { System.Diagnostics.Debug.WriteLine(ex.Message); } finally { command.Dispose(); connection.Dispose(); } } } } 安装Windows 服务 Windows 服务不同于普通 Windows 应用程序。

不可能简简单单地通过运行一个 EXE 就启动 Windows 服务了。

安装一个 Windows 服务应该通过使用.NET Framework 提供的 InstallUtil.exe 来完成,或者通过诸如一个Microsoft Installer (MSI)这样的文件部署项目完成。 添加服务安装程序

创建一个Windows 服务,仅用InstallUtil 程序去安装这个服务是不够的。你必须还要把一个服务安装程序添加到你的Windows 服务当中,这样便于InstallUtil 或是任何别的安装程序知道应用你服务的是怎样的配置设置。

1. 将这个服务程序切换到设计视图

2. 右击设计视图选择“添加安装程序”

3. 切换到刚被添加的ProjectInstaller 的设计视图

4. 设置serviceInstaller1 组件的属性:

1) ServiceName = My Sample Service

2) StartType = Automatic

5. 设置serviceProcessInstaller1 组件的属性

1) Account = LocalSystem

6. 生成解决方案 在完成上面的几个步骤之后,会自动由 Visual Studio 产生下面的源代码,它包含于 ProjectInstaller.cs 这个源文件内。 Code usingSystem; usingSystem.Collections; usingSystem.ComponentModel; usingSystem.Configuration.Install; namespaceCodeGuru.MyWindowsService { ///; ///SummarydescriptionforProjectInstaller. ///; [RunInstaller(true)] publicclassProjectInstaller: System.Configuration.Install.Installer { privateSystem.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1; privateSystem.ServiceProcess.ServiceInstallerserviceInstaller1; ///; ///Requireddesignervariable. ///; privateSystem.ComponentModel.Containercomponents=null; publicProjectInstaller() { //ThiscallisrequiredbytheDesigner. InitializeComponent(); //TODO:AddanyinitializationaftertheInitComponentcall } #regionComponentDesignergeneratedcode ///; ///RequiredmethodforDesignersupport-donotmodify ///thecontentsofthismethodwiththecodeeditor. ///; privatevoidInitializeComponent() { this.serviceProcessInstaller1=new System.ServiceProcess.ServiceProcessInstaller(); this.serviceInstaller1=new System.ServiceProcess.ServiceInstaller(); // //serviceProcessInstaller1 // this.serviceProcessInstaller1.Account= System.ServiceProcess.ServiceAccount.LocalSystem; this.serviceProcessInstaller1.Password=null; this.serviceProcessInstaller1.Username=null; // //serviceInstaller1 // this.serviceInstaller1.ServiceName=";MySampleService";; this.serviceInstaller1.StartType= System.ServiceProcess.ServiceStartMode.Automatic; // //ProjectInstaller // this.Installers.AddRange(new System.Configuration.Install.Installer[] {this.serviceProcessInstaller1,this.serviceInstaller1}); } #endregion } } 用InstallUtil 安装Windows 服务 现在这个服务已经生成,你需要把它安装好才能使用。

下面操作会指导你安装你的新服务。

1. 打开Visual Studio .NET 命令提示

2. 改变路径到你项目所在的 binDebug 文件夹位置(如果你以 Release 模式编译则在 binRelease 文件夹)

3. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。

4. 右击桌面上“我的电脑”,选择“管理”就可以打计算机管理控制台

5. 在“服务和应用程序”里面的“服务”部分里,你可以发现你的Windows 服务已经包含在服务列表当中了

6. 右击你的服务选择启动就可以启动你的服务了 在每次需要修改Windows 服务时,这就会要求你卸载和重新安装这个服务。不过要注意在卸载这个服务前,最好确保服务管理控制台已经关闭,这会是一个很好的习惯。如果没有这样操作的话,你可能在卸载和重安装Windows 服务时会遇到麻烦。仅卸载服务的话,可以执行相的InstallUtil 命令用于注销服务,不过要在后面加一个/u 命令开关。

调试Windows 服务 从另外的角度度看,调试Windows 服务绝不同于一个普通的应用程序。调试Windows 服务要求的步骤更多。服务不能象你对普通应用程序做的那样,只要简单地在开发环境下执行就可以调试了。服务必须首先被安装和启动,这一点在前面部分我们已经做到了。为了便于跟踪调试代码,一旦服务被启动,你就要用Visual Studio 把运行的进程附加进来(attach)。

记住,对你的Windows 服务做的任何修改都要对这个服务进行卸载和重安装。 附加正在运行的Windows 服务 为了调试程序,有些附加Windows 服务的操作说明。这些操作假定你已经安装了这个Windows 服务并且它正在运行。

1. 用Visual Studio 装载这个项目

2. 点击“调试”菜单

3. 点击“进程”菜单

4. 确保 显示系统进程 被选

5. 在 可用进程 列表中,把进程定位于你的可执行文件名称上点击选中它

6. 点击 附加 按钮

7. 点击 确定

8. 点击 关闭

9. 在timer1_Elapsed 方法里设置一个断点,然后等它执行 总结 现在你应该对Windows 服务是什么,以及如何创建、安装和调试它们有一个粗略的认识了。 Windows 服务的额处的功能你可以自行研究。这些功能包括暂停(OnPause) 和恢复 (OnContinue)的能力。

以上就是关于「如何调试windows 服务」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~

Win10系统之家www.ghost580.net♀独家使♀用,未经允许不得转载!』

相关文章

  • 如何安装windows服务

    如何安装windows服务

    1.电脑重装完后没有WINDOWS安装服务怎么办?首先你要有系统盘一张,下个镜像刻录出来也行,去买现成的盘也行重装系统要点:第一步,设置光启:所谓光启,意思就是计算机在启动的时候首先读光驱,这样的话如果光驱中有具有光...
  • 如何查看windows 服务

    如何查看windows 服务

    1.怎么样查看windows电脑服务器IP地址有时候工作需要远程连接电脑,需要对方告诉你他的IP地址。我发现很多人不知道怎么查自己的IP。希望下面的内容可以帮助你了解如何检查windows电脑服务器的IP地址。windows电脑服务器...
  • 电脑总是弹出交互式服务检测窗口如何解决

    电脑总是弹出交互式服务检测窗口如何解决

    1.如何解决电脑总是弹出交互式服务检测的问题生活中很多人使用电脑,可有些人不知道如何解决电脑总是弹出交互式服务检测的问题,下面快来一起看一看吧。工具/原料演示系统:Windows7系统版本号:build7601方法/步骤1、Win...
  • 苹果windows系统右键怎么用?如何使用苹果windows系统右键?

    苹果windows系统右键怎么用?如何使用苹果windows系统右键?

    有网友表示不知道苹果windows系统右键怎么用?苹果电脑和Windows系统是两个不相同的系统,各项功能操作也不一样,那么如何使用苹果windows系统右键?系统之家小编给大家带来详细的教程,一起学起来吧。苹果windows系统右...