2015-08-24 4 views
0

Donc, je me suis écrit une application pratique que je veux toujours exécuter. Il est écrit en C++ avec QT.Windows AutoStart parfois (aléatoirement?) Ne fonctionne pas

Autostart se fait cuvette du registre Si l'utilisateur clique sur la case autorun, ce code est exécuté

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

Cela fonctionne très bien, au moins la plupart du temps Mais parfois, la juste application ne démarre pas et je dois l'exécuter manuellement

Je ne sais pas vraiment ce que je fais mal ici, puisque beaucoup d'autres applications démarrent très bien à chaque fois ...

Un conseil?

Edit: problème se produit sur win7, 8.1 et 10

Répondre

0

L'utilisation de currentPath pour déterminer l'emplacement de votre exécutable de l'application est toujours une erreur. Tu ne devrais jamais faire ça. Sur la plupart des systèmes d'exploitation, vous n'avez aucun contrôle sur le répertoire de travail de votre application. Ça peut littéralement être n'importe quoi. De plus, en dehors d'OS X, les utilisateurs sont libres de, probablement, encouragés à définir le dossier de travail de votre application, de sorte que les boîtes de dialogue d'accès au fichier pointent vers un emplacement par défaut utile. Probablement, il réussit lorsque le répertoire de travail de votre processus se trouve être le même que son dossier d'installation lorsque les paramètres sont stockés dans le registre

Mais cet état n'est qu'une heureuse coïncidence, comme vous l'avez vous-même déterminé expérimentalement.

Vous devez utiliser QCoreApplication::applicationFilePath() pour obtenir le chemin correct. Vous devez également utiliser QDir::toNativeSeparators au lieu d'un remplacement à la main.

Votre code devrait se présenter comme suit:

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