惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Security Latest
Security Latest
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
GbyAI
GbyAI
L
LINUX DO - 最新话题
A
Arctic Wolf
T
Tor Project blog
G
GRAHAM CLULEY
I
InfoQ
博客园_首页
IT之家
IT之家
The Register - Security
The Register - Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
U
Unit 42
PCI Perspectives
PCI Perspectives
量子位
P
Palo Alto Networks Blog
S
Securelist
T
Troy Hunt's Blog
博客园 - 【当耐特】
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
罗磊的独立博客
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
NISL@THU
NISL@THU
C
Cisco Blogs
T
Threatpost
有赞技术团队
有赞技术团队
Forbes - Security
Forbes - Security
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
T
The Exploit Database - CXSecurity.com
Cloudbric
Cloudbric
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security

博客园 - 过江

多线程业务实现疑问 委托的三种写法 LinqToXml学习实例 String.format使用( 转) - 过江 - 博客园 TFS 安装手册以及常用问题解决方法 SQL server 系统优化--通过执行计划优化索引(1) (转) 请问在用C#+Mapx开始,怎样根据图元名称获得该图元已经选中的图元 C#基础:ref和out的区别 仿163邮箱的alert提示,beta1.1 (转) 好久都没有写东西了 终于用上CodeSmith4.0了,跟大家一起分享 XSLT基本语法和第一个实例 扩展TreeView控件(1) - 联动复选框(复选框的全选和取消全选)(转) 动态地生成用户输入的函数表达式(C#) (转) 画函数图形的C#程序(改进版) (转) 画函数图形的C#程序,兼论一个病态函数 (转) 获取M$ SQL Server用户表的字段信息 (转) 关于Remoting服务启动和停止的简单总结 (转) MSMQ(3)创建、同步异步接收消息
.Net新建、卸载、调试Windows服务
过江 · 2008-08-21 · via 博客园 - 过江

      由于项目里涉及到与其他系统的接口数据传递,所以采取了新建Windows服务的方式来同步接口数据。内容很简单,之所以把他记下来,是因为加深下自己的影响,也留个备份。
      我们直接就上步骤吧:
      第一,我们建立一个叫MyService的Windows程序。之后我们把Service1改名为MyService。
      第二,声明一个线程,  private Thread thd;;同时在MyService的OnStart方法里加入以下测试代码:
  if (thd == null || thd.ThreadState != System.Threading.ThreadState.Running)
    {
       thd = new Thread(new ThreadStart(RunApp));
       thd.Start();
    }
   第三,加入以下方法代码,代码主要是实现寻找进程devenv.exe写入到日志文件里面。      
    public void RunApp()
        {
            while (true)
            {
                int i = 0;
                foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
                {
                    if (p.ProcessName == "devenv")
                    {
                       LogLocation = System.Windows.Forms.Application.StartupPath + "\\" + "log";
                        LogMsg("测试", "找到进程devenv.exe");
                    }
                }
            }
            Thread.Sleep(1000);
        }
        public static string LogLocation = "";
        public static bool LogMsg(string ID, DateTime LogDate, string Msg)
        {
            try
            {
                if (ID == null || ID.Trim() == "")
                    return false;
                if (LogLocation == "")
                    return false;

                string path = LogLocation + "\\" + ID + "\\" + LogDate.ToString("yyyyMM");
                string file = path + "\\" + LogDate.ToString("yyyyMMdd") + ".txt";
                if (!System.IO.Directory.Exists(path))
                    System.IO.Directory.CreateDirectory(path);
                if (!System.IO.File.Exists(file))
                    System.IO.File.Create(file).Close();

                System.IO.StreamWriter sw = new System.IO.StreamWriter(file, true);
                sw.WriteLine(FormatStr(Msg));
                sw.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        private static string FormatStr(string msg)
        {
            return "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]" + msg;
        }
        public static bool LogMsg(string ID, string Msg)
        {
            return LogMsg(ID, DateTime.Now, Msg);
        } 
     第四,在OnStop方法里写入以下代码:
    if (thd != null)
      {
          thd.Abort();
          thd = null;
     }
   我们的这个服务代码就已经写完了,接下来我们要做的工作就是注册该服务。
   第五,点击MyService.cd查看设计器,再点加右键会出现添加安装程序。点击以后会出现serviceProcessInstaller1和serviceInstaller1两个组件。把serviceInstaller1的serviceName改成MyService,这里有两个地方需要注意.一个是StartType,有三种选择自动,手动,禁用.如果想要自动启动,那么遍选择Automatic即可.另一个需要注意的属性是Account,选择用户,一般情况下,我们选择Local System即可.。在Program.cs文件中有段用于启动服务,的代码:
 static void Main()
        {
            ServiceBase[] ServicesToRun;

            // 同一进程中可以运行多个用户服务。若要将
            // 另一个服务添加到此进程中,请更改下行以
            // 创建另一个服务对象。例如,
            //
            //   ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};
            //
            ServicesToRun = new ServiceBase[] { new MyService() };

            ServiceBase.Run(ServicesToRun);
        }

    生成该解决方案。
   第六,安装服务,打开Visual Studio 2005 命令提示,切换到你程序bin\Debug目录下,输入installutil MyService.exe,之后提示安装成功。我们可以到我们服务里去找刚才我们注册的服务了,找到之后启动它,那么在进程里就能找到MyService.exe这个进程了。到\bin\Debug目录下,找是否有个log文件里存着今日的文本文件。
      第七,卸载服务,切换到你程序bin\Debug目录下,输入installutil /u MyService.exe,就行了。
      第八,调试服务,启动Microsoft Visual Studio 2005的调试,同时启动调试-》附加到进程,点击显示所有用户进程,找到叫MyService.exe的进程,点加附加,我们就可以在我们的解决方案里设置断点调试了。over!谢谢!