起因是在PDA上A程序需要更新,激活了B程序,B程序开始下载最新的A程序,但A程序没有完全结束导致出错。

需要在B程序激活成功后,A程序必须结束。A程序的自动退出太不过不靠谱,没办法只能另谋它路。

就想到了在激活B程序后,在B程序里加上,下载前查找所有进程,找到A程序的进程都把它干掉。OK就准备这么办了。

说来惭愧,出来一年多了,都还没碰过进程都还没操作过,先去上补个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上一样的方式,估计自己要做很多底层工作了,要写很多方法了。


好在也是很强大的,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上即可看效果


相关论坛文章


本人提供:自己已经改造后的Process类 及相应的PC结束进程代码范例