PDA 进程篇
起因是在PDA上A程序需要更新,激活了B程序,B程序开始下载最新的A程序,但A程序没有完全结束导致出错。
需要在B程序激活成功后,A程序必须结束。A程序的自动退出太不过不靠谱,没办法只能另谋它路。
就想到了在激活B程序后,在B程序里加上,下载前查找所有进程,找到A程序的进程都把它干掉。OK就准备这么办了。
说来惭愧,出来一年多了,都还没碰过进程都还没操作过,先去CSDN上补个20分钟资料先,心里有底了写了小程序先,拿QQ来做实验,
public void KillProc(string pro) { ManagementObjectCollection objects = new ManagementObjectSearcher("SELECT * FROM Win32_Process").Get(); foreach (ManagementObject item in objects) { if (item["Name"].ToString().ToUpper().Trim().Equals(pro.ToUpper().Trim())) { string[] args = new string[] { "0" }; item.InvokeMethod("Terminate",args); } } }
代码很简单 以上只要传入进程名 就可以结束该进程了,比如我传入 KillProc("QQ.EXE");
运行下那QQ就这么挂了。这只是在PC机子上的。
我想事情不会像我的那么简单,因为PDA是一个怪胎。
果然PDA上不支持这写法,没办法,谁叫PDA内存那么小,预装的Net Compact Framework2.0 太精简了,很多事件方法都没有,如果想快速实现跟PC上一样的方式,估计自己要做很多底层工作了,要写很多方法了。
好在CSDN也是很强大的,N友推荐,微软官方有相应的文章,地址如下
http://msdn.microsoft.com/en-us/library/aa446560.aspx
看了下感触颇深,就本着拿来就用的精神,先拿来再说,之后改造了下符合自己业务即可。
参考如下
http://www.microsoft.com/downloads/details.aspx?FamilyId=9DEA4A5B-4573-4ADA-AFC3-08570065FC1C&displaylang=en
其中 因为Process类与PDA自带的Process 类有冲突,建议将Process改为Process2。因为原先的业务已经用到Process类了,如果直接用难保不会影响以前的业务,所以改改更健康。
解决方案在安装路径下
新打开需要版本转换,转换好后需要如果没有加载请手动修改移动类库
无法生存成功在某某路径下缺少 ToolHelp.exe 请在解决方案中添加 其它项目类别 | 智能设置CAB安装项目 取名叫ToolHelp 项目主输出
在生成后的ToolHelp.exe 直接安装在PDA上即可看效果
相关论坛文章
http://topic.csdn.net/u/20080829/10/57c4a0bb-0d15-42da-81fc-a4e5d8877666.html
本人提供:自己已经改造后的Process类 及相应的PC结束进程代码范例