我用C#调用执行一个外部exe,安装成系统服务,已经成功了,这个服务也可以正常启动,可是停止服务时却出现问题: C#的进程停止了,但是这个外部的exe的进程却没有停止!!!在继续运行!!! 好奇怪~~是为什么啊??我在OnStop里面已经写了停止exe的程式,而且加了this.CanStop=true;可是没有运行~~?大家来帮帮我吧
解决方案 »
- 关于方法的参数传递
- IEnumerable<string> expr 是什么意思?这样定义的吗?这是什么语法?
- 如何从代码理解多线程?
- “WindowsApplication1.Form1.Dispose(bool)”: 没有找到适合的方法来重写
- 问个问题:中文词汇总数是多少?英文词汇总数又是多少?
- Session 用法
- 提一个关于C# 反射的问题
- 请问C#程序可以在没有安装.NET Framework的电脑上运行吗?
- 菜菜问题,C# 写的小应用程序,无法在没有NET框架的Win9x,2000,XP 下用是吗
- vb.net如何读vb6.0的源程序
- web form 设计时支持继承哪个类?
- 不知道大家谁有这个电子书《Microsoft Visual C# .NET 2003开发技巧大全》
protected override void OnStart(string[] args)
{
Process[] TestService_processNames=Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName);
System.Diagnostics.Process[] Test_processNames = System.Diagnostics.Process.GetProcessesByName("test"); if (TestService_processNames.Length > 1 || Test_processNames.Length >0)
{
eventLog1.WriteEntry("Test is already running");
return;
}
else
{
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
Info.FileName = "test.exe";
Info.WorkingDirectory = "D:\\test.exe"; System.Diagnostics.Process Proc ;
try
{
Proc=System.Diagnostics.Process.Start(Info);//启动外部程序
}
catch(System.ComponentModel.Win32Exception e)
{
eventLog1.WriteEntry("系统找不到指定的程序文件。\r{0}"+ e.Message);
return;
}
}
}
protected override void OnStop()
{
eventLog1.WriteEntry("Stop Service!");
//Stop C# Service
Process[] TestService_processNames=Process.GetProcessesByName (System.Diagnostics.Process.GetCurrentProcess().ProcessName);
foreach(System.Diagnostics.Process processChild in TestService_processNames)
{
if(!processChild.CloseMainWindow())
{
processChild.Kill();
}
} //Stop test.exe
System.Diagnostics.Process[] Test_processNames = System.Diagnostics.Process.GetProcessesByName("test");
foreach(System.Diagnostics.Process processChild in Test_processNames)
{
if(!processChild.CloseMainWindow())
{
processChild.Kill();
}
}
}
感觉OnStop没有执行
System.Diagnostics.Process[] Test_processNames = System.Diagnostics.Process.GetProcessesByName("test");
foreach(System.Diagnostics.Process processChild in Test_processNames)
{
processChild.Kill();
}
我改成你说的:先执行关闭“test.exe”也不行,还是没关掉也
还有其它方法吗,请指教,非常感谢
System.Diagnostics.Process[] Test_processNames = System.Diagnostics.Process.GetProcessesByName("test");是否能找到相应的进程
我就是在控制台调试的,不能kill掉,在应用程序日志里也没报错to Knight94(愚翁):
我在另外一个win专案里断点调试,是可以找到test进程的但是我通过在日志里打印字符,\断点调试发现: 没找到test进程,
因为foreach内部字符没打出来
Thank you,Knight94(愚翁)
你的方法是可行的(先执行关闭“test.exe”),是我的笔下误,把test名写错了