当前位置:编程学习 > C#/ASP.NET >>

请问如何用C#做一个有窗口界面的win服务程序!因为一般的win服务没有界面的

请问如何用C#做一个有窗口界面的win服务程序!因为一般的win服务没有界面的 --------------------编程问答-------------------- 控制面板-管理工具-服务-你的服务点鼠标右键-属性-登陆标签-允许服务交互 --------------------编程问答-------------------- 不明白,我的意思是如何实现! --------------------编程问答-------------------- 我的意思如何实现类似小图标,单击一下可以运行一个WIN界面,又一个后台服务启在后台,可以查询运行情况等等,并且可以交互 --------------------编程问答-------------------- http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Fhejialin666
--------------------编程问答-------------------- 服务的关闭和启动
http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Fhejialin666 --------------------编程问答-------------------- 或者你在按钮事件里启动服务,再找个关闭服务 --------------------编程问答-------------------- Sql Server运行的时候在窗口右下角有个小图标
上面有启动 停止 重新启动等功能
你是不是要这样的功能?
用那个托盘工具图标做个应用程序,放在开机自动启动就行了,不要做服务,要做绿色软件 --------------------编程问答-------------------- Windows Service是没有ui的,首先照1楼做的,让它可以和某个桌面程序交互,然后再写一个WinForm程序来与其交互 --------------------编程问答-------------------- 以前写过,很简单的。

写个一个Winform程序,控制你服务就是了。

。net 里面的系统管理类提供了很多方便的类。。 --------------------编程问答-------------------- windows服务程序编写流程

       
  1、在Visual Studio 中建立一个新的windows服务项目RemoteServer1     
  2、打开Service1代码视图,里面已经有OnStart和OnStop两个方法了,OnStart就是启动服务时要做的事,OnStop是关闭服务时要做的事。

(我做的服务大的框架是监视一个文件夹,只要里面有新的.txt文件就读出它的内容,然后将其删掉。这就要用到文件监视FileSystemWatcher了,顺便又学习了一下文件监视的知识。)

  3、切换到设计视图,右键-添加安装程序     
  4、切换到新生成的ProjectInstaller.cs设计视图,找到serviceProcessInstaller1对Account属性设置为LocalSystem,对serviceInstaller1的ServiceName属性设置为RemoteServer1(服务的名字),StartType属性设置为Automatic(系统启动的时候自动启动服务)       
  【6、建立一个新的安装项目RemoteServerSetup(我们为刚才那个服务建立一个安装项目)     
  7、右键-添加-项目输出-主输出-选择RemoteService1-确定     
  8、右键-视图-自定义操作-自定义操作上右键-添加自定义操作-打开应用程序文件夹-选择刚才那个主输出-确定     
  9、重新生成这个安装项目-右键-安装】

6到9步为上网查的资料,我的做法是点项目右键的编译生成,如果没有错误就会生成一个和项目同名的.exe文件,用Visual Studio Tools里的命令编译器运行如下命令:

installutil 上面.exe文件完整的路径

(卸载服务是installutil /u 上面.exe文件完整的路径)

10、在服务管理器中(我的电脑-右键-管理-服务和应用程序-服务)找到RemoteServer1服务,启动服务

 

 

注意:

1.              如果要一次生成多个服务,要将RemoteService.Designer.cs文件中的

        this.ServiceName = "RemoteService1"; 删掉。

2.   需要一次生成多个服务时,不能调用静态方法,否则多个服务共用一个存储区。(比如生成日志文件的方法,如果将其设置成静态的,日志将生成到最后启动的服务的日志文件里)

3.   在OnStop()方法里也要有关闭每个服务的代码。

4.   最好在OnStart()和OnStop()中都写上try..catch,在catch中用System.Environment.Exit(0)结束。否则这两部分出错了服务就有可能死在那里,删也删不掉。

5.              服务程序有改动后,要重新编译,在重新编译之前把服务要关掉。

6.              在OnStart()中如果程序出错或捕捉到异常要用System.Environment.Exit(0);停止服务,在程序别的地方出现问题用Return;就行了。


 

文件监视:

FileSystemWatcher m_FileWatcher = new FileSystemWatcher();

 

//文件监视事件,括号里为方法名(触发的事件),在这个方法中写具体的操作

FileSystemEventHandler m_fileSystemEvent = new FileSystemEventHandle(fileSystemWatcher1_Created);

 

string m_path =“”; //监视的文件夹的路径

 

m_FileWatcher.BeginInit();

m_FileWatcher.Path = m_path;

m_FileWatcher.Created += m_fileSystemEvent;   //  .Changed/.Deleted/.Disposed/.Renamed

m_FileWatcher.EnableRaisingEvents = true;         //文件监视事件可以运行

m_FileWatcher.EndInit();

 

private void fileSystemWatcher1_Created(object sender, FileSystemEventArgs e)

{

m_FileWatcher.WaitForChanged(System.IO.WatcherChangeTypes.Changed, 500);

}

 

由于本项目还在测试和维护中,以后遇到的问题及解决方法也会更新到这篇文章中



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hejialin666/archive/2008/07/24/2705604.aspx --------------------编程问答-------------------- 1.   服务的关闭

string in_Svclist = "UploadService";

Console.WriteLine("{0} : Trying to Stop ....." , in_Svclist);

ServiceController sc = new ServiceController(in_Svclist);

 

if (sc.Status == ServiceControllerStatus.Running)

{

   Console.WriteLine("{0} : Stopping.....", in_Svclist);

   sc.Stop(); // 停止

   sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10000));

Console.WriteLine("{0} : Has stopped.....", in_Svclist);

}

else

{

    Console.WriteLine("{0} : Not Running.....", in_Svclist);

}

 

2.   服务的启动

string in_Svclist = "UploadService";

Console.WriteLine("{0} : Trying to Start .....", in_Svclist);

ServiceController sc = new ServiceController(in_Svclist);

 

if (sc.Status == ServiceControllerStatus.Stopped)

{

   Console.WriteLine("{0} : Starting.....", in_Svclist);

   sc.Start(); // 起動

   sc.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10000));

Console.WriteLine("{0} : Has started .....", in_Svclist);

}

else

{

   Console.WriteLine("{0} : Already Running.....", in_Svclist);

}



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hejialin666/archive/2008/08/27/2839292.aspx --------------------编程问答-------------------- 楼主应该不只是要启动\停止一类的吧!而是知道服务在干什么,到什么程度一类的吧!


1、写一个win界面(客户端)可以连接服务,服务允许客户端连接
2、服务触发的事件,客户端可以捕获到,并获取服务相关数据。
3、客户端可以向服务器发送指令,让服务执行指定的方法。 --------------------编程问答-------------------- 把服务和托盘程序分开就行了,就像sql server的处理方式,后台有个sql服务,托盘里的是sql manager程序,系统启动时先启动后台服务,托盘程序放在启动菜单中,只有登录到桌面才启动托盘程序,通过托盘程序和服务程序交互
--------------------编程问答-------------------- --------------------编程问答-------------------- 假设一个服务程序,一个客户端程序,现在的做法是利用数据库进行通讯,如不采用数据库的话,有什么方法可以实现服务器和客户端之间实现通讯? --------------------编程问答-------------------- 看不懂的表示。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,