第一、我用delphi 7写无form的可执行程序
所有的代码全部都写在 dpr文件里面
没有form 也就无法在option菜单中更改程序图标
所以编译好之后程序的图标就是delphi 7的缺省图标
问题是我现在不想要任何图标
就要是普通的运行在cmd下面的执行程序一样
想请问一下  有什么办法可以实现第二、是有关删除程序的问题
在程序运行的时候  他会释放出另外一个new.exe文件并执行
同时也会在win2000的进程列表中显示出new.exe
在这个时候有什么办法可以在不kill new.exe这个进程的情况下删除new.exe?
为此,我做了一个实验
在程序运行的时候释放一个木马程序 如 srv99.exe 并且运行
现在在进程列表中会显示 srv99.exe 而且我可以 telnet 到 99端口
这个时候我去删除srv99.exe 是被拒绝的
但是使用瑞星可以将文件删除  而删除之后仍然可以 telnet 到 99端口
想在此请教各位  有什么方法可以实现如同瑞星一样
在不终止进程的情况下删除文件?谢谢

解决方案 »

  1.   

    1.没有窗体不影响图标,影响程序图标的是那个与工程文件同名的RES资源文件2.不过没见过XP下的解决方法!各种操作系统下思路类似,先要解除内存中的映象9X下:
    只要对exe本身先执行FreeLibrary操作即可解除exe IMAGE在内存的映射NT下:
    关闭了 exe 文件的 IMAGE(硬编码为4),然后用 UnmapViewOfFile 解除了 exe 文件在内存中的映象,接着通过堆栈传递当前程序的路径名缓冲区指针给 DeleteFile
      

  2.   

    还是第一个问题
    刚看了一下res文件
    不知道用什么办法可以修改?
      

  3.   

    Delphi:var
      hModule: THandle;
      buf: array[0..255] of Char;
      hKernel32: THandle;
      pExitProcess, pDeleteFileA, pUnmapViewOfFile: Pointer;
    begin
      hModule := GetModuleHandle(nil);
      GetModuleFileName(hModule, buf, sizeof(buf));
      CloseHandle(THandle(4));
      hKernel32 := GetModuleHandle('KERNEL32');
      pExitProcess := GetProcAddress(hKernel32, 'ExitProcess');
      pDeleteFileA := GetProcAddress(hKernel32, 'DeleteFileA');
      pUnmapViewOfFile := GetProcAddress(hKernel32, 'UnmapViewOfFile');
      asm
        LEA EAX, buf
        PUSH 0
        PUSH 0
        PUSH EAX
        PUSH pExitProcess
        PUSH hModule
        PUSH pDeleteFileA
        PUSH pUnmapViewOfFile
        RET
      end;
    end;C++:HMODULE module = GetModuleHandle(0); 
    CHAR buf[MAX_PATH]; 
    GetModuleFileName(module, buf, sizeof Buf); 
    CloseHandle(HANDLE(4)); 
    __asm { 
        LEA EAX, buf
        PUSH 0
        PUSH 0
        PUSH EAX
        PUSH pExitProcess
        PUSH hModule
        PUSH pDeleteFileA
        PUSH pUnmapViewOfFile
        RET
    } 该代码在NT中有效,XP下无效记住在开发环境中运行会导致异常98下调用FreeLibrary可直接解除EXE在内存中的映像至于怎么修改资源文件?自己用用搜索引擎,找些基础资料,就不多说了简单的方法,不要删除工程文件中的{$R *.res},直接像你以前一样的方式修改图标