所以我给自己写了一个方便的应用程序,我一直想运行。 用QT用C ++编写。
通过注册表完成自动启动 如果用户单击自动运行复选框,则会执行此代码
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上出现问题
答案 0 :(得分:0)
使用currentPath
确定应用程序可执行文件的位置始终是错误。你永远不应该这样做。在大多数操作系统上,您无法控制应用程序的工作目录。它几乎可以是任何东西。此外,在OS X之外,用户可以自由地鼓励他们根据自己的喜好设置应用程序的工作文件夹,以便文件访问对话框指向一个有用的默认位置。
最有可能的是,当设置存储在注册表中时,当您的进程的工作目录恰好与其安装文件夹相同时,它会成功。但这种状态只是一个快乐的巧合,因为你自己已经通过实验确定了。
您应该使用QCoreApplication::applicationFilePath()
来获取正确的路径。您还应该使用QDir::toNativeSeparators
而不是手动更换。
您的代码应如下所示:
RegSettings.setValue("FanControlV2", QDir::toNativeSeparators(
QCoreApplication::applicationFilePath()));