代码之家  ›  专栏  ›  技术社区  ›  SqlRyan

我可以使用VS2010的Intellitrace为Windows服务收集数据吗?

  •  2
  • SqlRyan  · 技术社区  · 14 年前

    有人知道解决方法吗?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Evan    14 年前

    ConsoleMock.cs:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using WindowsService1;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Service1 s1 = new Service1();
                while (true)
                {
                    Console.WriteLine(">1 Start\n>2 Stop");
                    string result = Console.ReadLine();
                    if (result == "1")
                    {
                        var method = s1.GetType().GetMethod("OnStart", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                        method.Invoke(s1, new object[] { args });
                    }
                    else if (result == "2")
                    {
                        var method = s1.GetType().GetMethod("OnStop", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                        method.Invoke(s1, new object[] { });
                    }
                    else
                    {
                        Console.WriteLine("wrong command");
                    }
                }
            }
        }
    }
    
    
    Service.cs:
        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Diagnostics;
        using System.Linq;
        using System.ServiceProcess;
        using System.Text;
        using System.Threading;
    
        namespace WindowsService1
        {
            public partial class Service1 : ServiceBase
            {
                private long serviceCounter;
                private Thread workerThread;
    
                public Service1()
                {
                    InitializeComponent();
                    serviceCounter = 0;
    
                }
    
                public void Worker()
                {
                    while (true)
                    {
                        serviceCounter += 1;
                        System.Threading.Thread.Sleep(500);
    
                        try
                        {
                            throw new Exception(serviceCounter.ToString());
                        }
                        catch (Exception)
                        {
                        }
                    }
                }
    
                protected override void OnStart(string[] args)
                {
                    workerThread = new Thread(new ThreadStart(Worker));
                    workerThread.Start();
                }
    
                protected override void OnStop()
                {
                    workerThread.Abort();
                }
            }
        }
    
        2
  •  0
  •   Giulio Vian    12 年前

    埃文的技术不能回答最初的问题。

    http://blogs.msdn.com/b/msaffer/archive/2011/02/23/using-intellitrace-with-services.aspx . 在HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\services*myservice*下创建一个注册表多字符串值名称“Environment”,共三行

    COR_ENABLE_PROFILING=1
    COR_PROFILER={301EC75B-AD5A-459C-A4C4-911C878FA196}
    VSLOGGERCPLAN=Put_here_the_path_to_your_CollectionPlan.xml