5

我的应用程序用于SetSystemTime()从 GPS 源设置 PC 时钟。这在禁用用户帐户控制的 Windows 7 中可以正常工作,但在 Windows 8 中,即使禁用了 UAC,它也会失败。我回来的错误是ERROR_PRIVILEGE_NOT_HELD. 登录到机器的用户属于管理员组。如果我从资源管理器的文件上下文菜单中以“以管理员身份运行”运行应用程序,我只能让它工作 - 但登录用户是管理员。

那么......我需要在 Windows 8 上做些什么才能SetSysytemTime()开始工作?我是否需要比当前用户的管理员权限更高的权限?如果是这样,什么比管理员具有更高的权限?或者我是否需要以不同方式设置用户帐户以允许这些类型的调用在 Windows 8 上运行?

编辑:如评论中所述,手动尝试启用该SE_SYSTEMTIME_NAME权限不起作用。也不会尝试使用建议的 MSDN 方法添加权限LsaAddAccountRights

4

2 回答 2

4

如果您在“用户帐户控制设置”中将 UAC 滑块完全向下移动,则表示 UAC 不会显示任何提示,但仍处于启用状态。任何正常进程仍然在没有管理权限的情况下运行,但提升(通过“以管理员身份运行”或通过声明“requireAdministrator”)将在未经用户同意的情况下发生。

禁用安全策略“用户帐户控制:在管理员批准模式下运行所有​​管理员”或将注册表项“EnableLUA”设置为 0 将更改此行为,但会阻止所有 Metro Modern UI 应用程序运行。

如果您的用户没有管理权限,则您无法在不使用服务的情况下更改系统时钟。

如果您希望您的应用程序为普通用户正常启动(但没有特殊权限)为管理员(自动)提升,您可能需要在清单中声明“highestAvailable”。

于 2012-11-01T12:40:34.023 回答
3

我认为这可能与在 Windows 8 上禁用 UAC 的事实有关,进程(默认情况下)以中等完整性运行,而不是高完整性(请参阅这篇文章)。

我认为您需要requireAdministrator应用程序清单中请求

于 2012-09-13T10:56:29.430 回答