http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 9119|回复: 3
打印 上一主题 下一主题

[综合] Windows服务程序,前台不显示界面

[复制链接]
跳转到指定楼层
楼主
发表于 2013-6-28 14:02:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用C#写了一个定时监控服务,检测某一程序是否运行,如果没有运行,则启动改程序,如果已经运行,则不作任何操作。代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;

namespace RegularMonitoringProgram
{
    public partial class Service1 : ServiceBase
    {
        
        public Service1()
        {
            InitializeComponent();
            InitService();
        }
        private void InitService()
        {
            base.AutoLog = true;
            base.CanShutdown = true;
            base.CanStop = true;
            base.CanPauseAndContinue = true;
            base.ServiceName = "BMTService";  //这个名字很重要,设置不一致会产生 1083 错误哦!
        }
        protected override void OnStart(string[] args)
        {
            //timeExe 在Service1.Designer.cs 函数private void InitializeComponent()定义
            this.timeExe.Enabled = true;
            this.tCheckExe();
        }

        protected override void OnStop()
        {
            this.timeExe.Enabled = false;
        }
        //定时执行的事件
        private void timeExe_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            this.tCheckExe();
        }

        private void tCheckExe()
        {
            Thread t = new Thread(new ThreadStart(OnTimedEvent));
            t.Start();
        }  

      
        private void OnTimedEvent()
        {
            bool InfoFlag = false;
            string StartAppPath = "";
            string ProcessName = "";
            string flag = "";
            string path = @"d:\Setting\setting.xml";

            ProcessName = XMLSettings.getUrl("ProcessName", path);
            StartAppPath = XMLSettings.getUrl("AppLocation", path);
            flag = XMLSettings.getUrl("isUpdating", path);
            Process[] Processes = Process.GetProcesses();
            Process ProcessApp = Processes[0];
            for (int i = 0; i < Processes.Length; i++)
            {
                if (Processes.ProcessName.ToLower() == ProcessName)
                {
                    ProcessApp = Processes;
                    InfoFlag = true;
                    break;
                }
                else continue;
            }
            if (!InfoFlag)
            {
                if (flag=="0")
                {
                    try
                    {
                        Process AppProcess = new Process();
                        AppProcess.StartInfo.FileName = StartAppPath;
                        //AppProcess.StartInfo.Arguments = "";
                        AppProcess.Start();

                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }
前台调试的时候可以出来用户程序界面,比如cmd.exe,就可以打开,但是裝到本地电脑服务之中就不显示前台界面了,求高手指点...


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
沙发
发表于 2013-6-28 14:17:56 | 只看该作者
安装到服务之中?不太理解,你说具体点,怎么安装了服务之中的
板凳
 楼主| 发表于 2013-6-29 16:51:24 | 只看该作者
站长苏飞 发表于 2013-6-28 14:17
安装到服务之中?不太理解,你说具体点,怎么安装了服务之中的

就是这程序调试的时候,没啥问题,把代码程序装成服务运行时,就不显示界面了,这程序就是服务程序
地板
发表于 2013-7-1 09:20:17 | 只看该作者
asd583416347 发表于 2013-6-29 16:51
就是这程序调试的时候,没啥问题,把代码程序装成服务运行时,就不显示界面了,这程序就是服务程序

服务本身就是没有界面的。。
它只是作为一个永远运行的后台程序。
你要对他进行什么操作一般都需要用配置文档,(如xml,数据库等)。。

另外建议你写服务的时候尽量不要用时钟,最好改用线程。

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-19 06:47

© 2014-2021

快速回复 返回顶部 返回列表