Windows AutoStart иногда (случайно?) Не работает

Поэтому я написал себе удобное приложение, которое всегда хочу запускать.
Он написан на 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

0

Решение

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

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

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

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

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

Другие решения


По вопросам рекламы [email protected]