由于项目里涉及到与其他系统的接口数据传递,所以采取了新建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!谢谢!