1

我为我的应用程序开发了一个自动更新程序,它从更新服务器获取所有文件的 MD5 哈希列表,并在不匹配的情况下下载新文件。目前,这只发生在主 DLL 文件上,它在更新程序完成工作之后(!)在运行时加载。

它在 Windows XP 中完美运行,但一些用户已经抱怨更新程序在尝试覆盖上述 DLL 文件时给他们错误 5 访问被拒绝。如果他们以管理员权限运行它,它可以工作,但是对于他们来说,在启动程序时总是同意管理员权限是一件烦人的事情。

我的问题:为什么访问覆盖该 DLL 被拒绝,有没有办法在没有 UAC 提示的情况下实现它?

或者:有没有办法让应用程序以管理员身份永久运行,用户只需同意一次,而不是每次运行时都同意。

PS:我使用的是 Qt 4.7,尤其是带有 QFile::WriteOnly 的 QFile::open 方法 | 如果打开失败并显示 errorString() 和一些解释,则 QFile::Truncate 并调用 QMessageBox。

谢谢!

4

1 回答 1

0

您是否确定应用程序是“单实例”,即从不运行两次?

如果不是这可能是一个解释......

至于让应用程序始终以管理员身份运行 - 你永远不应该这样做......

编辑:
至于 Windows 7:
您正试图直接覆盖程序中的某些内容......这是操作系统的一种安全措施,以防止在没有管理员权限的情况下在那里写入......

这些可以帮助处理 UAC:

http://msdn.microsoft.com/en-us/library/bb756929.aspx
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/20acb8b9-8b9c-4a85-9416-fccdef579f10 /
Windows 7 和 Vista UAC - 在 C# 中以编程方式请求提升

于 2011-07-30T22:08:31.447 回答