我只在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
任何人都可以解释为什么这段代码不起作用?
答案 0 :(得分:1)
Wow6432节点将在64位窗口中找到。这用于为64位系统中的应用程序提供32位环境。我假设您的应用程序是32位。因此,当它尝试读取注册表值时,它将被重定向到Wow6432节点。
可能是,您可以在HKCU下添加自定义注册表项,以决定是否在如上所述从Wow6432节点启动后运行应用程序。
这是在这里添加您的启动条目:
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
然后,在HKCU中添加自定义条目,以决定是继续运行应用程序还是关闭它。
我的意思是,您可以在应用程序中添加单独的逻辑。
答案 1 :(得分:0)
包含此标题QSettings
#include <QSettings>
并在您的代码中添加此内容。
QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",
QSettings::NativeFormat);
settings.setValue("YourApplicationName",
QCoreApplication::applicationFilePath().replace('/', '\\'));