我们有一个小型实用程序,它通过简单地复制/替换某些文件来更新客户端计算机上的软件。这些文件由 EXE 和 DLL 组成。一切正常,除了我们的一位客户。他们有一个 Active Directory 域(就像我们的许多客户一样),但在每台计算机上,DLL 文件都无法复制,错误代码为 5(拒绝访问)。即使应用程序以管理员身份运行 - 以管理员身份登录计算机。发生在他们所有的 XP、Vista 和 7 机器上。EXE 文件被很好地复制/替换,但不是 DLL 文件。如果 DLL 不存在,它会很好地复制。但如果它需要更换,它就会失败。
这些文件是使用 API 调用复制的:
function CopyFile(lpExistingFileName, lpNewFileName: PWideChar; bFailIfExists: BOOL): BOOL; stdcall;
源是一个由自解压包自动创建的临时文件夹,目标是我们软件的安装位置(由我们的注册表项标识)。目标通常是 C: 根目录中的一个目录,但也发生在 Program Files (x86) 和他们计算机上的其他任何地方。他们的 IT 人员坚持认为他们没有在他们的域中配置特殊设置来阻止这种情况。这是我们唯一遇到此问题的客户,并且发生在他们所有 20 多台计算机上。但是,当我通过 Windows 手动复制文件时,文件复制/替换就好了。我检查了这些文件的属性,它们不是隐藏的或只读的。
我还需要做什么来确保正确访问?由于以管理员身份运行不成功吗?