C# Windows Mobile 5-如何杀死其他应用程序?
目前,我正在为Windows Mobile 5.0创建两个应用程序(应用程序A和B),并使用Compact Framework 2.0。应用程序A是主应用程序,B是子应用程序C# Windows Mobile 5-如何杀死其他应用程序?,c#,windows-mobile,compact-framework,C#,Windows Mobile,Compact Framework,目前,我正在为Windows Mobile 5.0创建两个应用程序(应用程序A和B),并使用Compact Framework 2.0。应用程序A是主应用程序,B是子应用程序 以下是流程: 启动应用程序A 应用程序A将启动应用程序B 应用程序B将执行一些过程 应用程序B将杀死应用程序A 应用程序B将修补/升级应用程序A。(ala更新管理器) 应用程序B将重新启动应用程序A 应用程序B将退出 现在我陷入了杀戮应用程序A的困境。我确实尝试过使用OpenNETCF ProcessEntry Ki
- 以下是流程:
- 启动应用程序A
- 应用程序A将启动应用程序B
- 应用程序B将执行一些过程
- 应用程序B将杀死应用程序A
- 应用程序B将修补/升级应用程序A。(ala更新管理器)
- 应用程序B将重新启动应用程序A
- 应用程序B将退出
谢谢。您可以使用以下功能尝试本机代码:
processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
success = TerminateProcess(processHandle, 0);
以上代码来自位于的任务管理器
但是,如果您正在为这两个应用程序编写代码,那么最好在这两个应用程序之间设计一种通信机制。这样,您将从应用程序B向应用程序a发送一条消息,应用程序a将自杀。Stormenet,我硬编码了应用程序的名称。然后我使用OpenNETCF.ToolHelp.ProcessEntry[]=ProcessEntry.getProcesss()生成一个对象来获取所有可用的进程强> 然后在foreach循环中,如果ProcessEntry对象如:ProcessEntry.ExeFile与“applicationName”匹配,我将使用ProcessEntry.Kill()
我认为您可以从OpenNETCF站点获取OpenNETCF.ToolHelp dll。请注意,如果您试图杀死的应用程序持有打开的端口或其他系统资源,那么它可能会挂起退出。确保在窗体关闭时有效地处理所有内容 这可以通过将材料放入以下位置来实现:
public void Dispose(bool disposing)
{
}
主窗体设计器中的代码块,或者如果您选择了不以Windows窗体为中心的体系结构,则只需在Application.run(new YourForm())之后运行dispose调用,它将在应用程序关闭后执行
如果你真的觉得很懒,那么只需设置一些析构函数(也称为终结器~),但如果你这样做的话,在“析构函数”时要小心在托管对象之间的关系中导航,因为无法保证将销毁哪些order对象。ctacke,我认为应用程序A崩溃是由于一些正在运行的线程未正确关闭或仍在后台运行,因为在应用程序B执行Kill()函数期间,应用程序A将运行多个线程
如果我使用SendMessage(hWnd,WM_CLOSE,0,0)函数,它不会使设备崩溃(这是一件好事)。。。它只关闭窗体。(应用程序A包含多种形式,例如:frmLogin和frmMainMenu)。嗯,也许我需要把hWnd指向正确的表单…现在我走的是另一条路线 下载补丁并将其放入临时文件夹后,我将使用OpenNETCF.WindowsCE.PowerManagement.SoftReset()进行软重置
应用程序B将在启动时启动,然后它将扫描临时文件夹并用新版本替换应用程序A。如何从appA获取procID?您是通过命令行传递它,还是通过它的窗口名获取它?我非常感兴趣的是,当使用SDF时,您所说的“设备崩溃”是什么意思。它只是调用toolhelp API,因此应该非常基本(我至少在Axim x51上的WinMo 5.0下对其进行了测试)。