我为我的应用程序开发了一个自动更新程序,它从更新服务器获取所有文件的 MD5 哈希列表,并在不匹配的情况下下载新文件。目前,这只发生在主 DLL 文件上,它在更新程序完成工作之后(!)在运行时加载。
它在 Windows XP 中完美运行,但一些用户已经抱怨更新程序在尝试覆盖上述 DLL 文件时给他们错误 5 访问被拒绝。如果他们以管理员权限运行它,它可以工作,但是对于他们来说,在启动程序时总是同意管理员权限是一件烦人的事情。
我的问题:为什么访问覆盖该 DLL 被拒绝,有没有办法在没有 UAC 提示的情况下实现它?
或者:有没有办法让应用程序以管理员身份永久运行,用户只需同意一次,而不是每次运行时都同意。
PS:我使用的是 Qt 4.7,尤其是带有 QFile::WriteOnly 的 QFile::open 方法 | 如果打开失败并显示 errorString() 和一些解释,则 QFile::Truncate 并调用 QMessageBox。
谢谢!