我想覆盖某些正被使用的文件(比如gina.dll),但windows提示该文件在使用不能覆盖。
但我注意到有些安装程序可以在重启动后进行覆盖!
该功能如何实现,是不是windows有某些设置,谢谢!

解决方案 »

  1.   

    不是强制结束某些进程!因为gina.dll在系统退出不能被unload的
      

  2.   

    好象是通过Windows 脚本宿主在重启时运行脚本(一个开机自动运行的特殊脚本,名字忘了)进行文件(.wsh或.wsf)覆盖的,也可以在autoexec.bat中做,不过麻烦些
      

  3.   

    MoveFileEx,你仔细看这个函数的说明。
      

  4.   

    HKEY_LOCAL_MACHINE
      ->Software->Windows->CurrentVersion
      ->RunOnce重起之前,看看这个地方,你就会明白了
      

  5.   

    你可以用Wininit.ini文件来实现在Windows中,一个可执行文件如果正在运行或某个文件(如*.dll,*.vxd,*.sys等)正在被打开使用时,则不能被改写或删除。例如,你不可能在资源管理器中删除Windowsexplorer.exe,而在Windows的GDI界面下,有一些文件一直处于这种状态下,除explorer.exe外,还有显示驱动程序文件,文件子系统文件等,如果我们要对这些文件进行升级,改动,就必须在Windows保护模式核心启动前进行,于是Windows就提供了基于Wininit.ini文件的一个机制来完成这个任务,这个机制是,要删除或改写这类文件的应用程序按一定的格式把命令写入Wininit.ini。Windows在重启时,将在Windows目录下搜索Wininit.ini文件,如果找到,就遵照该文件指令删除、改名、更新文件,完成任务后,将删除Wininit.ini文件本身,继续启动过程。所以Wininit.ini文件中的指令只会被执行一次,列目录时也通常没有它的踪影。  Wininit.ini文件的格式简述如下:  Windows 95 Resource Kit提到Wininit.ini文件有3个可能的段,但只叙述了rename段的用法,虽然名为rename,却可实现删除、改名、更新文件的功能,其格式如下所示。  [rename]  ……  filename1=filename2  ……  filename1=filename2相当于依次执行copy filename2 filename1及del filename2这两个DOS命令。  启动时,Windows将用filename2覆盖filename1,再删除filename2,这就实现了用filename2与更新filename1的目的,如果filename1不存在,实际结果是将filename2改名为filename1;如果要删除文件,可令filename1为nul,例如,  [rename]  ……   nul=filename2  ……  将删除filename2。  以上文件名都必须包含完整路径。注意,由于Wininit.ini文件的处理是在Windows文件系统调入前,所以不支持长文件名。  Wininit.ini的应用很多,除了经常在软硬件的安装程序中用到外,还有软硬件的卸载程序中用到,比如:假设你要为自己的软件编写一个卸载程序,这个卸载程序本身是不可能被自己删除的,因为它试图删除自身时,自身却正在运行。为了清除卸载程序本身,你就得借助于Wininit.ini文件。顺便提一句,在安装Windows的最后阶段,就是利用Wininit.ini文件来清除和更名被安装程序SETUP自身使用的文件。
      

  6.   

    参考msdn movefileex说明,9x/nt(2k)实现不同的