这个操作只在windows 8中出现问题。
这是在其他windows操作系统(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
注册表中的值:"C:Program Files (x86)AppnameAppname.exe" -m
谁能解释一下为什么这个代码不能工作?
Wow6432节点将在64位windows上找到。它用于为64位系统中的应用程序提供32位环境。我假设您的应用程序是32位的。因此,当它尝试读取Registry值时,它将被重定向到Wow6432节点。
也许,你可以在HKCU下添加一个自定义注册表项,以决定是否在从Wow6432节点启动后运行应用程序。
也就是在这里添加你的启动条目:
HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRun
然后,在HKCU中添加一个自定义条目,用于决定是否继续运行应用程序或关闭它。
我的意思是,你可以在你的应用程序中为它添加一个单独的逻辑
包括标题QSettings
#include <QSettings>
并将其添加到代码中。
QSettings settings("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",
QSettings::NativeFormat);
settings.setValue("YourApplicationName",
QCoreApplication::applicationFilePath().replace('/', '\'));