QT自动启动应用程序与操作系统



这个操作只在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('/', '\'));

最新更新