【问题标题】:Qt how to write to HKLMQt如何写信给HKLM
【发布时间】:2016-02-07 13:16:14
【问题描述】:

在我的 Qt5.5 应用程序中,我正在尝试写入

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

注册表项,使用 QSettings 在每个帐户上启用自动运行,但即使使用管理员权限我也无法做到这一点。你能告诉我我应该怎么做吗?如果我尝试将此代码与 HKCU 一起使用以启用对当前用户的自动运行,它正在工作。

QSettings bootUp("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
bootUp.setValue("/MyApp", "\"" + QDir::currentPath() + "/MyApp.exe\"" + " -a -u");

【问题讨论】:

  • 请注意,更好的解决方案是在开始菜单的“启动”文件夹中添加应用程序的快捷方式。这可以为特定用户或所有用户完成。不理会注册表。
  • 它是您正在运行的确切代码吗?您能否提供HKCU 的工作代码进行比较?
  • @John_West 我只将 HKEY_CURRENT_USER 替换为 HKEY_LOCAL_MACHINE,并且没有显示新密钥。
  • @CodyGray 如何在当前用户和所有用户之间切换?我读过一些支持truefalseAllUsers-setting,但在文档中找不到任何关于如何使用它的内容。 stackoverflow.com/questions/59510656/…

标签: c++ qt registry


【解决方案1】:

让您感到困惑的是,您有一个在 64 位 Windows 上运行的 32 位进程,并且您正在写入由registry redirector 重定向的注册表的一部分。所以

HKLM\Software

被重定向到

HKLM\Software\Wow6432Node

您会在下面找到您的条目。这没什么好担心的。系统将在启动时从 32 和 64 视图中读取密钥。

请记住,如果您的代码无法写入注册表,那么它将引发异常。

简而言之,您的代码可以正常工作,您只是在注册表编辑器中查找错误的位置。

【讨论】:

  • @Ilya 这有点不同,因为那里涉及虚拟化。我假设我们在这里没有虚拟化。
  • @DavidHeffernan 是的,确实如此,这把钥匙真的存在……我的问题解决了:)谢谢。
  • 你的心灵调试技巧比我强。上次我记得看它时,Qt 没有使用异常(改变了吗?)并且 QSettings::setValue 方法返回 void,因此如果发生错误,似乎几乎没有机会报告错误。跨度>
  • @Cody 我不知道 Qt。我只是假设它会抛出。
猜你喜欢
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 2011-03-28
  • 2021-06-20
相关资源
最近更新 更多