我的程序要监控用户指定的程序,通过打开文件对话框的形式选择应用程序名,但程序名有可能被改掉,但对应的进程名还是不变,我怎样得到进程名?

解决方案 »

  1.   

    那些程序监控软件如何实现的呢?
    像WinGate客户端,可以指定某一程序启动时,启动WinGate
    我现在实现了自我启动的代码,关键是怎样去匹配程序名与进程名。
      

  2.   

    WinGate设置后,把程序的文件名改掉也可以吗?
      

  3.   

    是的, 有点逊, 如果用户不是很频繁地做这件事的话,还是可以承受这一点损失的.
    何况在你得到之后立即把它kill掉呢
      

  4.   

    分析PE文件的格式,得到内部文件名称!PE文件格式可以参考
    http://vcangle.8u8.com/file.htm
      

  5.   

    vcforever,内部文件名称!=进程名
      

  6.   

    以前我也发现了这个问题,就是release的可执行文件在改名后,任务管理器里的名字并没有改变我做了一个实验:
    随便找个文件,例如notepad.exe步骤一:运行notepad.exe,任务管理器里显示notepad.exe步骤二:改名为notepad1.exe运行,任务管理器里仍显示notepad.exe步骤三:用UltraEdit打开notepad1.exe,在偏移0x400的地方改为0xff(此处不影响exe文件的运行),运行,这时再打开任务管理器,此时显示notepad1.exe!步骤四:把notepad1.exe改名为notepad.exe,运行,打开任务管理器,显示notepad1.exe步骤五:用UltraEdit打开,在偏移0x400的地方改为0x00(此处不影响exe文件的运行),运行,打开任务管理器,此时显示notepad.exe!所以可以归纳总结为:
    windows在执行一个文件时,会比较和cache里的文件,如果文件的时间一致,并且其他(有待讨论,例如可以是CRC32)的部分也一样的话,就在系统里记录执行文件名为cache里的文件名,否则就显示真正的文件名,并且把它放入cache中附:说明一下,改动文件名是不会影响到文件的修改时间的
      

  7.   

    这个cache从上述现象上来看,应该是存在的,但是具体在哪里,以何种形式存在,以及究竟有没有这种chche,欢迎大家研究讨论
      

  8.   

    先记录用户指定的exe文件名,然后,监视新创建的进程,把进程对应的pe映像和先前记录的exe文件名进行比对。