我们有一个小实用程序,只需复制/替换某些文件即可在客户端计算机上更新我们的软件。这些文件包括EXE和DLL。除了我们的一位客户外,一切正常。他们有一个Active Directory域(我们的许多客户都这样做),但在每台计算机上,DLL文件都无法复制,错误代码为5(访问被拒绝)。即使应用程序以管理员身份运行 - 以管理员身份登录计算机。发生在所有XP,Vista和7机器上。 EXE文件被复制/替换正常,但不是DLL文件。如果DLL不存在,则复制正常。但如果需要更换,则失败。
使用API调用复制这些文件:
function CopyFile(lpExistingFileName, lpNewFileName: PWideChar; bFailIfExists: BOOL): BOOL; stdcall;
源是由自解压程序包自动创建的临时文件夹,目标是我们的软件安装位置(由我们的注册表项标识)。目标通常是C:root中的目录,但也发生在Program Files(x86)和其计算机上的任何其他位置。他们的IT人员坚称他们没有在他们的域中配置特殊设置来阻止它。这是我们唯一遇到此问题的客户端,并且发生在所有20多台计算机上。但是,当我通过Windows手动复制文件时,文件复制/替换就好了。我检查了这些文件的属性,它们不是隐藏的或只读的。
我还需要做些什么来确保正确访问?由于以管理员身份运行不起作用?
答案 0 :(得分:2)
使用procMon跟踪更新实用程序。您应该看到ACCESS_DENIED错误。分析他们。留意模仿。还询问他们是否有任何软件IPS,“愤怒”防病毒,或者他们是否配置了软件Restirction / AppLocker。最后一些可能与您的问题没有关系,但请尝试一下。 不太可能是一个问题,但如果您的实用程序是32位并且没有清单,它可能会被操作系统(Vista及更高版本)静默重定向。
更新: 如果程序太旧(即不符合MS对软件/数据位置的建议),MS ACT (Microsoft Application Compatibility Toolkit (ACT))可能是您的朋友。