1

我仅在 Windows 8 中对此操作有问题。
这是在其他 Windwos OS (Win7/Vista/XP) 中工作的代码

#ifdef Q_WS_WIN
QSettings bootUpSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);

if (runOnbootCheckBox->isChecked())
{
    bootUpSettings.setValue("AppName","\""+base_dir+"\""+ (startMinimizedCheckBox->isChecked() ? " -m" : ""));
}
else
    bootUpSettings.remove("AppName");
#endif

来自 regesty 的值:"C:\Program Files (x86)\Appname\Appname.exe" -m
任何人都可以解释为什么这段代码不起作用?

4

2 回答 2

1

Wow6432 节点将在 64 位窗口上找到。这用于在 64 位系统中为您的应用程序提供 32 位环境。我假设您的应用程序是 32 位的。因此,当它尝试读取注册表值时,它将被重定向到 Wow6432 节点。

可能是,您可以在 HKCU 下添加自定义注册表项,以决定在从 Wow6432 节点启动后是否运行应用程序,如上所述。

那就是在此处添加您的启动条目:

HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

然后,在 HKCU 中添加一个自定义条目,用于决定是继续运行应用程序还是关闭它。

我的意思是,您可以为此在应用程序中添加单独的逻辑。

于 2013-05-18T09:59:29.400 回答
0

包括这个标题 QSettings

#include <QSettings>

并将其添加到您的代码中。

QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat); settings.setValue("YourApplicationName", QCoreApplication::applicationFilePath().replace('/', '\\'));

于 2016-07-22T09:43:18.873 回答