代码:
CFile csf;
CFileException e;
if(!csf.Open(filepath, CFile::modeRead | CFile::typeBinary, &e))
……
filepath指向的一个硬盘文件,这个硬盘文件是当前进程运行需要的一个dll文件,绝大多数情况下能够正常返回,但是某些时候函数会返回错误,得到CFileException::11或者LastError 32,察看错误码的意思是:文件被独占无法打开,但是基本上只有当前进程运行才会占用此dll文件,难道当前进程的权限允许运行该dll却不允许在当前进程中open这个硬盘文件吗?
如果这个情况完全不可以,那为什么绝大多数客户机器上面这个open调用都能成功返回,某些客户机器上面又不能返回呢?特别的例子是有一个win98SE操作系统的客户机上面不能正确返回
请高手为我详细解释一下,谢谢

解决方案 »

  1.   

    仔细检查这个dll是否有别的进程需要使用
      

  2.   

    是不是你自己已经Load了这个DLL?
      

  3.   

    CathySun118(斯年) ( 五级(中级)) 信誉:100  2007-05-10 11:04:03  得分:0

    仔细检查这个dll是否有别的进程需要使用这个从程序上讲是不可能的,但是根据pkrobbie(pkrobbie):“还有一种可能是某些低劣的杀毒软件在搞鬼。”的猜测,既有可能是低劣的杀毒软件也有可能是低劣的病毒:)在搞鬼,因为客户声称他的机器上面没有任何杀毒软件。不过我认为无论如何当前进程都已经成功运行也就是Load此dll文件进入了进程空间以后,当前进程至少应该有办法用只读方式打开这个文件,这种看法正确否?Albert_1030() ,当前进程显然要load这个dll才能正确启动运行,不过已经load的dll文件不能用只读打开?或者各位大虾根据我这个情况,提供一个读取该dll文件数据的其他方案?用内存文件映射可以吗?内存文件映射以后文件的内容是否——完全——和硬盘文件一致?最后一点是我最需要的
      

  4.   

    The process cannot access the file because it is being used by another process.
      

  5.   

    DentistryDoctor 大虾非常坚定地认为这个文件被其他的进程占用了,那么低劣的杀毒软件或者病毒造成这个现象的可能性就非常大了最后请教DentistryDoctor大虾,无论别的程序怎么样占用,本进程使用只读方式对本进程所能加载的DLL文件做内存映射是不是肯定能成功?如果内存映射能成功,Cfile open不能成功(都是只读模式),那么唯一的区别就是有没有声称内核对象造成的?