2015-08-24 22 views
0

所以我给自己写了一个方便的应用程序,我总是想运行。它使用QT编写在C++中。Windows自动启动有时(随机?)不起作用

自动启动完成槽注册表 如果用户点击自动运行复选框,该代码被执行

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

采用currentPath来确定应用程序的可执行文件的位置是总是错误

编辑。你永远不应该那样做。在大多数操作系统上,您无法控制应用程序的工作目录。它可以是字面上的任何东西。此外,在OS X之外,用户可以自由地,可能地鼓励为自己的喜好设置应用程序的工作文件夹,以便文件访问对话框将指向有用的默认位置。

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

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

您的代码应该如下所示:

RegSettings.setValue("FanControlV2", QDir::toNativeSeparators(
        QCoreApplication::applicationFilePath())); 
相关问题