C# windowsCE5.0 杀进程

mohugomohu 2011-11-25 04:13:13
我有两个运行于手持设备上的程序,他们有时候需要更新,我有一个自动更新的程序(这是第三个程序了,与本文无关),但是在更新的时候要把这两个程序都关掉才行,请问我怎样才能用代码关掉其他两个程序呢?
我上网查了很多资料,来来去去都是那两篇文章,都是转载的,说的是程序关掉自身进程的,可是我要实现的是关掉其他的进程(我知道程序名称)。
在强调一下,是WindowsCE的,不要把winform的代码发来,没用的。
...全文
85 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishiyong23 2011-12-03
  • 打赏
  • 举报
回复
Process[] P = Process.GetProcessesByName(在进程里面的映像名称);
if (P.Length > 0)
{
string Pro_Add = P[0].MainModule.FileName;
P[0].Kill();//kill
}

我一直都是这么用的
mohugomohu 2011-12-03
  • 打赏
  • 举报
回复
好像没什么人回答,我自己研究了一下,好像是可以了,主要就是通过FindWindow找到那个窗体然后关闭,不过我这个程序只有一个窗体,所以关闭一个就行了,如果是多个的话应该就要全部关闭吧,不是很清楚。

        #region 杀进程的相关方法
public const int PROCESS_ALL_ACCESS = 0x000F0000 | 0x00100000 | 0xFFF;
[DllImport("coredll.dll")]
public extern static int GetWindowThreadProcessId(IntPtr hWnd, ref int lpdwProcessId);
[DllImport("coredll.dll")]
public extern static IntPtr OpenProcess(int fdwAccess, int fInherit, int IDProcess);
[DllImport("coredll.dll")]
public extern static bool TerminateProcess(IntPtr hProcess, int uExitCode);
[DllImport("coredll.dll")]
public extern static bool CloseHandle(IntPtr hObject);
public static bool Kill(IntPtr window)
{
int processId = 0;
GetWindowThreadProcessId(window, ref processId);
IntPtr hProcess = IntPtr.Zero;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, processId);
if (hProcess.ToInt32() != 0)
{
if (TerminateProcess(hProcess, 1))
{
CloseHandle(hProcess);
return true;
}
else
{
CloseHandle(hProcess);
return false;
}
}
else
{
return false;
}
}
#endregion
[DllImport("CoreDll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);


这个是调用:
                    //查找网络连接程序并关闭,这样才能更新
IntPtr CncmPDAAutoUpdate = Common.PublicMethods.FindWindow(null, "网络连接");
Common.PublicMethods.Kill(CncmPDAAutoUpdate);
绿领巾童鞋 2011-11-26
  • 打赏
  • 举报
回复
http://blog.csdn.net/tanbin6833232/article/details/3732496
绿领巾童鞋 2011-11-26
  • 打赏
  • 举报
回复
如何关闭系统内的任意进程!
HWND hWnd;
// 先得到想要关闭的窗口的句柄
// 比如用FindWindow
hWnd=FindWindow(NULL,_T("dlg"));
if ( hWnd ==NULL )
return ;
// 下面是关闭进程的两种方法
// // 如果来文的则 //
::PostMessage(hWnd,WM_CLOSE,0,0);

// // 如果来武的则 //
DWORD dwProcessId;
// 得到该窗口的进程ID
GetWindowThreadProcessId(hWnd,&dwProcessId);
// 从进程ID打开进程句柄
HANDLE handle=OpenProcess(0,FALSE,dwProcessId);
// 强制终止进程
TerminateProcess(handle,0);
mohugomohu 2011-11-25
  • 打赏
  • 举报
回复
我调用api函数可以获取所有进程的名称,但是不知道杀死指定进程用什么办法
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mohugomohu 的回复:]

引用 2 楼 hefeng_aspnet 的回复:

http://www.cnblogs.com/xocean/archive/2009/08/26/1554221.html

WindowsCE项目没有Process.GetProcessesByName这个方法
[/Quote]
下班回去给你找找,我之前解决过这个,是没有GetProcessesByName的方法
mohugomohu 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hefeng_aspnet 的回复:]

http://www.cnblogs.com/xocean/archive/2009/08/26/1554221.html
[/Quote]
WindowsCE项目没有Process.GetProcessesByName这个方法
mohugomohu 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wangsunjun 的回复:]

找到进程名,可以Kill掉的
我电脑里有,有代码,不行留言,我回去给你掉下,和C/S的是有点不一样
[/Quote]
能给我看看吗?谢谢
  • 打赏
  • 举报
回复
找到进程名,可以Kill掉的
我电脑里有,有代码,不行留言,我回去给你掉下,和C/S的是有点不一样

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧