我已经完成了一个GUI的程序。现在我想将我的这个程序和OS绑定到一块儿,实现当我的程序被关闭时,OS也将受到影响。(我们做的是监控系统)
问题是,我这个程序是EXE而不是DLL,问现在有什么比较简便的方法实现这一点呢?

解决方案 »

  1.   

    程序关闭时调用ExitWindowEx关闭Windows
      

  2.   

    本人郑重声明:本人决不是做3721那些烂事。
    但是如果我的程序被强行关闭呢(即不是通过正常使用途径关闭的),那不是无法在某个地方调用ExitWindowEx了?
      

  3.   

    做成DLL,插入到系统核心进程空间去
      

  4.   

    能不能在现有EXE程序的基础上实现呢?因为现在我的EXE程序基本上已经完成了所有功能,如果要改成dll,恐怕要修改比较多的地方
      

  5.   

    不用改你的程序的功能,只需要另外做一个dll,在你的程序运行的时候插入到系统核心进程空间去
      

  6.   

    替换Windows的 GDI32.dll User32.dll
    呵呵
      

  7.   

    开玩笑吧,那两个文件替换了Windows就起不来了。你可以再做一个程序来监控你的监控程序。
      

  8.   

    能否在我的程序启动的时候将一个dll注入系统核心,然后在这个dll里面启动一个线程来监视我的程序呢?问题是被注入系统核心的这个dll怎么启动一个线程,因为在DllMain里面启动的话,恐怕会有问题呢。
      

  9.   

    通过注册表,注册成系统的服务进程。例如:
    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT]
    "Type"=dword:00000010
    "Start"=dword:00000003
    "ErrorControl"=dword:00000001
    "ImagePath"="c:\xx.exe"
    "DisplayName"="my service"[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT\Security]
    "Security"=hex:01,00,14,80,a0,00,00,00,ac,00,00,00,14,00,00,00,30,00,00,00,02,  00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,  00,00,02,00,70,00,04,00,00,00,00,00,18,00,fd,01,02,00,01,01,00,00,00,00,00,  05,12,00,00,00,74,00,6f,00,00,00,1c,00,ff,01,0f,00,01,02,00,00,00,00,00,05,  20,00,00,00,20,02,00,00,72,00,73,00,00,00,18,00,8d,01,02,00,01,01,00,00,00,  00,00,05,0b,00,00,00,20,02,00,00,00,00,1c,00,fd,01,02,00,01,02,00,00,00,00,  00,05,20,00,00,00,23,02,00,00,72,00,73,00,01,01,00,00,00,00,00,05,12,00,00,  00,01,01,00,00,00,00,00,05,12,00,00,00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT\Enum]
    "0"="Root\\LEGACY_SQLSERVERAGENT\\0000"
    "Count"=dword:00000001
    "NextInstance"=dword:00000001