我的应用使用SetSystemTime()
设置来自GPS源的PC时钟。这在Windows 7中正常工作,禁用了用户帐户控制,但在Windows 8中,即使禁用了UAC,也会失败。我得到的错误是ERROR_PRIVILEGE_NOT_HELD
。登录到计算机的用户位于Administrators组中。如果我从资源管理器中的文件上下文菜单中以“以管理员身份运行”运行应用程序,我只能使其工作 - 但登录用户是管理员。
那么......在Windows 8上我需要做些什么才能让SetSysytemTime()
工作?我是否需要比当前用户的管理员权限更高的权限?如果是这样,什么比管理员更高的特权?或者我是否需要以不同方式设置用户帐户以允许这些类型的调用在Windows 8上运行?
编辑:如评论中所述,手动尝试启用SE_SYSTEMTIME_NAME
权限不起作用。也没有尝试使用建议的LsaAddAccountRights
的MSDN方法添加权限。
答案 0 :(得分:4)
如果在“用户帐户控制设置”中完全移动UAC滑块,则表示UAC不会显示任何提示,但仍处于启用状态。任何正常的进程仍然在没有管理权限的情况下运行,但是在没有用户同意的情况下,将提升(通过“以管理员身份运行”或通过声明为“requireAdministrator”)。
禁用安全策略“用户帐户控制:以管理员批准模式运行所有管理员”或将注册表项“EnableLUA”设置为0将更改此行为,但会阻止所有 Metro < / s>来自运行的现代UI应用程序。
如果您的用户没有管理权限,则无法在不使用服务的情况下更改系统时钟。
如果您希望应用程序正常启动(但没有特殊权限)普通用户和(自动)升级为管理员,您可能需要在清单中声明“highestAvailable”。
答案 1 :(得分:3)
我认为这可能与以下事实有关:在Windows 8上禁用UAC时,进程(默认情况下)以中等完整性运行,而不是高完整性(请参阅this post)。
我认为您需要在application manifest
中请求requireAdministrator