2015-08-24 3 views
0

Так что я написал себе удобное приложение, которое я всегда хочу запустить. Это написано на C++ с QT.Windows AutoStart иногда (случайно?) Не работает

Автозапуск делается корыта реестра Если пользователь нажимает на автозапуск флажок, этот код запускается на выполнение

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"); 
} 

Это прекрасно работает, по крайней мере, большую часть времени Но иногда приложение просто не запускается , и я должен запустить его вручную

Я действительно не знаю, что я здесь делаю неправильно, так как многие многие другие приложения начинают просто отлично каждый раз ...

Любые советы?

Edit: проблема возникает на win7, 8.1 и 10

ответ

0

Использование currentPath для определения местоположения исполняемого файла вашего приложения является всегда ошибка. Вы никогда не должны этого делать. В большинстве операционных систем у вас нет никакого контроля над тем, что представляет собой рабочий каталог вашего приложения. Это может быть буквально все. Кроме того, за пределами OS X пользователи могут, не желая, настраивать рабочую папку для вашего приложения по своему вкусу, чтобы диалоги доступа к файлам указывали на полезное местоположение по умолчанию.

Скорее всего, это удается, когда рабочий каталог вашего процесса будет таким же, как и его установочная папка, когда настройки сохранены в реестре. Но это состояние - просто счастливое совпадение, как вы сами экспериментально определились.

Чтобы получить правильный путь, вы должны использовать QCoreApplication::applicationFilePath(). Вы должны также использовать QDir::toNativeSeparators вместо ручной прокатки.

Ваш код должен выглядеть следующим образом:

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