1 开始 ->运行 ->cmd 2 cd到C:\WINDOWS\MicrosoftNET\Framework\v2050727(Framework版本号按IIS配置)3 安装服务: 运行命令行 InstallUtilexe E:/testexe 卸载服务: 运行命令行 InstallUtilexe -u E:/testexe 这样就能删除了
这时候,我们可以用另外一个命令来卸载,如下:
C:WINDOWS
system32
sc
delete
MyService
其中的
MyService
是你的服务的名字,sc
delete
郭红俊的定时工作服务
当然你也可以用这个工具create,start,stop服务。比如,我们就可以用下面的命令,安装服务,并把服务启动起来。
创建项目
1
创建windows服务项目
2
右键点击Service1cs,查看代码, 用于编写 *** 作逻辑代码
3
代码中OnStart用于执行服务事件,一般采用线程方式执行方法,便于隔一段事件执行一回
END
安装服务配置
1
打开Service1cs视图界面
2
在视图内右键-->添加安装程序
3
项目中添加了ProjectInstallercs文件,该文件中视图自动会添加俩个组件
serviceProcessInstaller1
serviceInstaller1
4
选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem
5
选中serviceInstaller1组件,查看属性
设置ServiceName的值, 该值表示在系统服务中的名称
设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动
设置Description,添加服务描述
6
重新生成项目
END
安装服务
1
点击 开始,运行中输入cmd,获取命令提示符
win7需要已管理员的身份启动,否则无法安装
2
输入 cd C:\Windows\MicrosoftNET\Framework\v4030319 回车
切换当前目录,此处需要注意的是,在C:\Windows\MicrosoftNET\Framework目录下有很多类似版本,具体去哪个目录要看项目的运行环境,例 如果是net framework20则需要输入 cd C:\Windows\MicrosoftNET\Framework\v2050727
3
输入 InstallUtilexe E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTestexe 回车
说明:E:\TestApp\Winform\WinServiceTest\WinServiceTest\bin\Debug\WinServiceTestexe表示项目生成的exe文件位置
4
打开服务,就可以看到已经安装的服务了
END
卸载服务
1
卸载很简单,打开cmd, 直接输入 sc delete WinServiceTest便可
我们将研究如何创建一个作为Windows服务的应用程序。内容包含什么是Windows服务,如何创建、安装和调试它们。会用到SystemServiceProcessServiceBase命名空间的类。
什么是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服务扩充了SystemServiceProcessService类。所有以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 SystemCollections;
using SystemComponentModel;
using SystemData;
using SystemDataSqlClient;
using SystemDiagnostics;
using SystemServiceProcess;
namespace CodeGuruMyWindowsService
{
public class MyService : SystemServiceProcessServiceBase
{
private SystemTimersTimer timer1;
/// <remarks>
/// Required designer variable
/// </remarks>
private SystemComponentModelContainer components = null;
public MyService()
{
// This call is required by the WindowsForms
// Component Designer
InitializeComponent();
}
// The main entry point for the process
static void Main()
{
SystemServiceProcessServiceBase[] ServicesToRun;
ServicesToRun = new SystemServiceProcessServiceBase[]
{ new MyService() };
SystemServiceProcessServiceBaseRun(ServicesToRun);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor
/// </summary>
private void InitializeComponent()
{
thistimer1 = new SystemTimersTimer();
((SystemComponentModelISupportInitialize)
(thistimer1))BeginInit();
//
// timer1
//
thistimer1Interval = 30000;
thistimer1Elapsed +=
new SystemTimersElapsedEventHandler(thistimer1_Elapsed);
//
// MyService
//
thisServiceName = "My Sample Service";
((SystemComponentModelISupportInitialize)
(thistimer1))EndInit();
}
/// <summary>
/// Clean up any resources being used
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
componentsDispose();
}
}
baseDispose( disposing );
}
/// <summary>
/// Set things in motion so your service can do its work
/// </summary>
protected override void OnStart(string[] args)
{
thistimer1Enabled = true;
thisLogMessage("Service Started");
}
/// <summary>
/// Stop this service
/// </summary>
protected override void OnStop()
{
thistimer1Enabled = false;
thisLogMessage("Service Stopped");
}
/
Respond to the Elapsed event of the timer control
/
private void timer1_Elapsed(object sender,
SystemTimersElapsedEventArgs e)
{
thisLogMessage("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);
connectionOpen();
int numrows = commandExecuteNonQuery();
}
catch( Exception ex )
{
SystemDiagnosticsDebugWriteLine(exMessage);
}
finally
{
commandDispose();
connectionDispose();
}
}
}
}
安装Windows服务
Windows服务不同于普通Windows应用程序。不可能简简单单地通过运行一个EXE就启动Windows服务了。安装一个Windows服务应该通过使用NET Framework提供的InstallUtilexe来完成,或者通过诸如一个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产生下面的源代码,它包含于ProjectInstallercs这个源文件内。
Code
using System;
using SystemCollections;
using SystemComponentModel;
using SystemConfigurationInstall;
namespace CodeGuruMyWindowsService
{
/// <summary>
/// Summary description for ProjectInstaller
/// </summary>
[RunInstaller(true)]
public class ProjectInstaller :
SystemConfigurationInstallInstaller
{
private SystemServiceProcessServiceProcessInstaller
serviceProcessInstaller1;
private SystemServiceProcessServiceInstaller serviceInstaller1;
/// <summary>
/// Required designer variable
/// </summary>
private SystemComponentModelContainer 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()
{
thisserviceProcessInstaller1 = new
SystemServiceProcessServiceProcessInstaller();
thisserviceInstaller1 = new
SystemServiceProcessServiceInstaller();
//
// serviceProcessInstaller1
//
thisserviceProcessInstaller1Account =
SystemServiceProcessServiceAccountLocalSystem;
thisserviceProcessInstaller1Password = null;
thisserviceProcessInstaller1Username = null;
//
// serviceInstaller1
//
thisserviceInstaller1ServiceName = "My Sample Service";
thisserviceInstaller1StartType =
SystemServiceProcessServiceStartModeAutomatic;
//
// ProjectInstaller
//
thisInstallersAddRange(new
SystemConfigurationInstallInstaller[]
{thisserviceProcessInstaller1, thisserviceInstaller1});
}
#endregion
}
}
用InstallUtil安装Windows服务
现在这个服务已经生成,你需要把它安装好才能使用。下面 *** 作会指导你安装你的新服务。
1 打开Visual Studio NET命令提示
2 改变路径到你项目所在的bin\Debug文件夹位置(如果你以Release模式编译则在bin\Release文件夹)
3 执行命令“InstallUtilexe MyWindowsServiceexe”注册这个服务,使它建立一个合适的注册项。
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服务属性来设置。
打开VS2013,选择文件->新建->项目。
2
在项目中找到windows服务项目,重新命名后点击确定。
3
在service1设计器中点击右键,选择查看代码,进入代码页面。
4
在代码编辑器中添加OnStart服务启动方法。
5
继续在代码编辑器中添加ChkSrv方法。
6
继续在代码编辑器中添加你需要定时执行的任务方法。
7
继续在代码编辑器中添加WriteLog书写日志的方法。
8
继续在代码编辑器中添加OnStop服务停止方法。
END
添加安装程序
1
在service1中的设计器中点击右键,选择添加安装程序。
2
在安装程序中选中serviceProcessInstaller1,查看其属性,将Account值改为LocalSystem。
3
在安装程序中选中serviceInstaller1,查看其属性,将ServiceName值改为你想要的服务名称。
END
启动Windows服务
选中项目,右键,生成项目。
然后在debug目录中找到生成的程序。
在目录C:\Windows\MicrosoftNET\Framework中找到程序对应的net版本,然后在该版本的目录中找到InstallUtilexe程序,并将该程序拷贝到我们项目中的Debug目录下。
找到命令提示符,以管理员身份运行。然后在dos里面输入命令D:\Statistics\WindowsServiceTest\WindowsServiceTest\bin\Debug\WindowsServiceTestexe D:\Statistics\WindowsServiceTest\WindowsServiceTest\bin\Debug\InstallUtilexe,当然,这里需要将目录换成你自己程序所在的目录。
5
回车后,Windows服务就已经安装好了。在任务管理器的服务中就可以找到当初命名的服务名称的服务了。选中该服务点击右键,启动服务就完成了。程序会在你代码设定的每天八点整做你设定的任务。
解决方法:
一、这个是由于您的 *** 作系统NET Framework版本太低导致的,需要升级NET Framework版本,可以从以下地址下载个NET Framework v4030319的版本文件进行安装,下载地址(>
二、目前使用到MicrosoftNET Framework40的软件很少,估计是CAD不能在40下面运行。你把MicrosoftNETFramework40卸载了吧,也需要你来删除名为以下的这个运行的程序:C:\Windows\MicrosoftNET\Framework\v4030319\aspnet_regiisexe
然后重新下载MicrosoftNET Framework 35版本,同时打好补丁即可。出现你中的错误,是你没有安装35版本及其补丁。因为你已经安装了高级的40,肯定不给你再安装旧的35了,而CAD仅能够在35以下版本中运行,所以报错。
很多开机启动程序仅仅加在启动项里面,只有登陆后才真正启动。windows服务在开机未进行用户登录前就启动了。正是利用这一点,解决一些服务器自动重启后特定软件也自动启动的问题。
1新建一个服务项目 visual C#----windows----windows服务;
2添加一个dataset(xsd),用于存储启动目标的路径,日志路径等。
在dataset可视化编辑中,添加一个datatable,包含两列 StartAppPath 和 LogFilePath。分别用于存储目标的路径、日志路径。
我认为利用datasetxsd存储配置参数的优势在于可以忽略xml解析的具体过程直接使用xml文件。
在dataset中 提供了ReadXml方法用于读取xml文件并将其转换成内存中的一张datatable表,数据很容易取出来!同样,WriteXml方法用于存储为xml格式的文件,也仅仅需要一句话而已。
3 programcs文件 作为程序入口,代码如下:
view plaincopy to clipboardprint
using SystemCollectionsGeneric;
using SystemServiceProcess;
using SystemText;
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() };
ServiceBaseRun(ServicesToRun);
}
}
}
using SystemCollectionsGeneric;
using SystemServiceProcess;
using SystemText;
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() };
ServiceBaseRun(ServicesToRun);
}
}
}
4servicecs主文件,代码如下:
using System;
using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemData;
using SystemIO;
using SystemDiagnostics;
using SystemServiceProcess;
using SystemText;
namespace WindowsServices_AutoStart
{
public partial class WindowsServices_AutoStart : ServiceBase
{
public WindowsServices_AutoStart()
{
InitializeComponent();
}
string StartAppPath =""; //@"F:\00exe";
string LogFilePath ="";// @"f:\WindowsServicetxt";
protected override void OnStart(string[] args)
{
string exePath = SystemThreadingThreadGetDomain()BaseDirectory;
//
if (!FileExists(exePath + @"\ServiceAppPathxml"))
{
dsAppPath ds = new dsAppPath();
object[] obj=new object[2];
obj[0]="0";
obj[1]="0";
dsTables["dtAppPath"]RowsAdd(obj);
dsTables["dtAppPath"]WriteXml(exePath + @"\ServiceAppPathxml");
return;
}
try
{
dsAppPath ds = new dsAppPath();
dsTables["dtAppPath"]ReadXml(exePath + @"\ServiceAppPathxml");
DataTable dt = dsTables["dtAppPath"];
StartAppPath = dtRows[0]["StartAppPath"]ToString();
LogFilePath = dtRows[0]["LogFilePath"]ToString();
}
catch { return; }
if (FileExists(StartAppPath))
{
try
{
Process proc = new Process();
procStartInfoFileName = StartAppPath; //注意路径
//procStartInfoArguments = "";
procStart();
}
catch (SystemException ex)
{
//MessageBoxShow(this, "找不到帮助文件路径。文件是否被改动或删除?\n" + exMessage, "提示", MessageBoxButtonsOK, MessageBoxIconInformation);
}
FileStream fs = new FileStream(LogFilePath, FileModeOpenOrCreate, FileAccessWrite);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriterBaseStreamSeek(0, SeekOriginEnd);
m_streamWriterWriteLine("WindowsService: Service Started" + DateTimeNowToString() + "\n");
m_streamWriterFlush();
m_streamWriterClose();
fsClose();
}
}
protected override void OnStop()
{
try
{
// TODO: 在此处添加代码以执行停止服务所需的关闭 *** 作。
FileStream fs = new FileStream(LogFilePath, FileModeOpenOrCreate, FileAccessWrite);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriterBaseStreamSeek(0, SeekOriginEnd);
m_streamWriterWriteLine("WindowsService: Service Stopped " + DateTimeNowToString() + "\n");
m_streamWriterFlush();
m_streamWriterClose();
fsClose();
}
catch
{
}
}
}
}
5启动调试,成功时也会d出一个对话框大致意思是提示服务需要安装。
6把Debug文件夹下面的exe执行程序,安装为windows系统服务,安装方法网上很多介绍。我说一种常用的:
安装服务
访问项目中的已编译可执行文件所在的目录。
用项目的输出作为参数,从命令行运行 InstallUtilexe。在命令行中输入下列代码:
installutil yourprojectexe
卸载服务
用项目的输出作为参数,从命令行运行 InstallUtilexe。
installutil /u yourprojectexe
至此,整个服务已经编写,编译,安装完成,你可以在控制面板的管理工具的服务中,看到你编写的服务。
7安装好了之后在系统服务列表中可以管理服务,这时要注意将服务的属性窗口----登陆----“允许于桌面交互”勾选!这样才能在启动了你要的目标程序后不单单存留于进程。在桌面上也看得到。
8关于卸载服务,目前有两个概念:一是禁用而已;一是完全删除服务。 前者可以通过服务管理窗口直接完成。后者则需要进入注册表“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”找到服务名称的文件夹,整个删掉,重新启动电脑后,服务消失。
9扩展思考:经过修改代码,还可以实现:启动目标程序之前,检测进程中是否存在目标程序,存在则不再次启动
以上就是关于如何通过cmd指令删除韩博士驱动助理全部的内容,包括:如何通过cmd指令删除韩博士驱动助理、如何卸载用Installutil /u无法卸载的服务、c#编写windows服务程序怎么自动安装程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)