我为我的应用程序开发了一个自动更新器,它从更新服务器获取所有文件的MD5散列列表,并在不匹配的情况下下载新文件。目前,这种情况只发生在主DLL文件上,该文件在运行时加载(!)更新程序已经完成了他的工作。
它在Windows XP中运行得很好,但一些用户已经抱怨说,当他们试图覆盖上述DLL文件时,更新程序会给他们错误5访问被拒绝。如果他们使用管理员权限运行它,它可以工作,但对于他们来说,在启动程序时总是同意管理员权限是一件令人恼火的事情。
我的问题是:为什么覆盖DLL的访问被拒绝了,有没有办法在没有UAC提示的情况下实现它?
或者:有没有一种方法可以让应用程序永久以管理员身份运行,用户只需同意一次,而不是每次运行时都同意。
PS:我正在使用Qt4.7,特别是QFile::open方法和QFile::WriteOnly | QFile::Truncate,如果使用errorString()和一些解释打开失败,则调用QMessageBox。
谢谢!
发布于 2011-07-31 06:08:31
你有没有确保应用程序是“单实例”的,即永远不会运行两次?
如果不是,这可能是一种解释。
至于让应用程序始终以管理员身份运行-你永远不应该这样做……
编辑:
至于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 and Vista UAC - Programmatically requesting elevation in C#
https://stackoverflow.com/questions/6886249
复制相似问题