Windows AutoStart 有时(随机?)不工作

Windows AutoStart sometimes (randomly?) not working

所以我给自己写了一个我一直想要的方便的应用程序 运行。 它是用 C++ 和 QT 编写的。

自动启动是通过注册表完成的 如果用户单击自动运行 复选框,将执行此代码

QSettings RegSettings("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",
    QSettings::NativeFormat);
if (ui.cb_autorun->isChecked())
{
    RegSettings.setValue("FanControlV2", "\"" + QDir::currentPath().remove("/platforms").replace("/", "\") + "\FanControllerV2.exe\"");
}
else {
    RegSettings.remove("FanControlV2");
}

这很好用,至少大部分时间是这样 但有时应用程序无法启动,我必须 运行 手动

我真的不知道我做错了什么,因为许多其他应用程序每次都可以正常启动...

有什么建议吗?

编辑:问题发生在 win7、8.1 和 10

使用 currentPath 确定应用程序可执行文件的位置总是错误。你永远不应该那样做。在大多数操作系统上,您无法控制应用程序的工作目录。它实际上可以是任何东西。此外,在 OS X 之外,用户可以自由地,很可能,不,鼓励他们根据自己的喜好为您的应用程序设置工作文件夹,以便文件访问对话框将指向一个有用的默认位置。

当设置存储在注册表中时,当您的进程的工作目录恰好与其安装文件夹相同时,它很可能会成功。但这种状态只是一个愉快的巧合,正如你自己通过实验确定的那样。

您应该使用 QCoreApplication::applicationFilePath() 来获得正确的路径。您还应该使用 QDir::toNativeSeparators 而不是手动替换。

您的代码应如下所示:

RegSettings.setValue("FanControlV2", QDir::toNativeSeparators(
                     QCoreApplication::applicationFilePath()));