一般做的服务程序. 在任务管理器中可以关闭. 如何不让其结束
有些服务程序可以在任务管理器中结束,   有些不可以   
 怎么实现   的....      
 就在服务程序中实现,   不用双进程守护
------解决方案--------------------沙发,帮忙顶 
------解决方案--------------------有点像病毒,我帮你研究一下
------解决方案--------------------在FORM中有个Closing事件,可以在关闭的时候再启动自己的程序,但是,这样只仅仅限制于正常关闭。 
   如果你的程序中有DLL处于循环调用系统的DLL。那么,XP会默认判断为跟系统相关的进程。这样就没有办法杀掉。
------解决方案--------------------用RemoteThread,挂到Explorer里面,那就除非用工具杀,否则干不掉
------解决方案--------------------注册成系统进关键进程应该删不掉,像system进程 
 使用CreateRemoteThread和LoadLibrary技术的步骤如下: 
 1.  得到远程进程的HANDLE(使用OpenProcess)。 
 2.  在远程进程中为DLL文件名分配内存(VirtualAllocEx)。 
 3.  把DLL的文件名(全路径)写到分配的内存中(WriteProcessMemory) 
 4.  使用CreateRemoteThread和LoadLibrary把你的DLL映射近远程进程。 
 5.  等待远程线程结束(WaitForSingleObject),即等待LoadLibrary返回。也就是说当我们的DllMain(是以DLL_PROCESS_ATTACH为参数调用的)返回时远程线程也就立即结束了。 
 6.  取回远程线程的结束码(GetExitCodeThtread),即LoadLibrary的返回值――我们DLL加载后的基地址(HMODULE)。 
 7.  释放第2步分配的内存(VirtualFreeEx)。 
 8.  用CreateRemoteThread和FreeLibrary把DLL从远程进程中卸载。调用时传递第6步取得的HMODULE给FreeLibrary(通过CreateRemoteThread的lpParameter参数)。 
 9.  等待线程的结束(WaitSingleObject)。 
 10.采用C++/CLI编写: 
 // InjectDll.h   
 #pragma once   
 #include  <windows.h>  
 using namespace System;   
 namespace InjectDll {   
 public ref class InjectDllManager 
 { 
 public: 
 // szLibPath - 要加载的Dll,hProcess - 被加载的远程进程,iLibPathSize-要加载的Dll的名称的长度 
 void InjectLib2Process(char szLibPath[],HANDLE hProcess,int iLibPathSize) 
 { 
 HANDLE hThread; 
 void*   pLibRemote; 
 DWORD   hLibModule;//已加载的DLL的基地址(HMODULE); 
 HMODULE hKernel32 = GetModuleHandle(L "Kernel32 "); 
 //初始化 szLibPath 
 // 
 // 1. 在远程进程中为szLibPath 分配内存 
 // 2. 写szLibPath到分配的内存 
 pLibRemote = VirtualAllocEx( hProcess, NULL, iLibPathSize, 
 MEM_COMMIT, PAGE_READWRITE ); 
 WriteProcessMemory( hProcess, pLibRemote, (void*)szLibPath, 
 sizeof(szLibPath), NULL ); 
 // 加载  "szLibPath.dll " 到远程进程 
 // (通过 CreateRemoteThread & LoadLibrary) 
 hThread = CreateRemoteThread( hProcess, NULL, 0, 
 (LPTHREAD_START_ROUTINE) GetProcAddress( hKernel32, 
  "LoadLibraryA " ),pLibRemote, 0, NULL ); 
 WaitForSingleObject( hThread, INFINITE ); 
 //取得DLL的基地址 
 GetExitCodeThread( hThread, &hLibModule ); 
 //扫尾工作 
 CloseHandle( hThread ); 
 VirtualFreeEx( hProcess, pLibRemote, iLibPathSize, MEM_RELEASE ); 
 // 从目标进程卸载LibSpu.dll 
 // (通过 CreateRemoteThread & FreeLibrary) 
 hThread = CreateRemoteThread( hProcess, NULL, 0, 
 (LPTHREAD_START_ROUTINE) GetProcAddress( hKernel32, "FreeLibrary " ),(void*)hLibModule, 0, NULL ); 
 WaitForSingleObject( hThread, INFINITE ); 
 // 扫尾工作 
 CloseHandle( hThread ); 
 } 
 }; 
 }   
 生成Dll,然后在C#项目中将它引用进来,最后编写: 
 public partial class Form1 : Form 
     { 
         public Form1() 
         { 
             InitializeComponent(); 
         }   
         private void Form1_Load(object sender, EventArgs e) 
         { 
             InjectDll.InjectDllManager iManager = new InjectDll.InjectDllManager(); 
             iManager.InjectLib2Process(.); 
             //..... 
         } 
     }     
------解决方案--------------------路过,不懂,帮顶一下
------解决方案--------------------学习
------解决方案--------------------