2013-06-15 2 views
0

Je travaille sur Mac OS & Qt et je voudrais copier des fichiers (avec une fonction maison) dans /Library/Frameworks mais la copie ne chaque fois. Le problème vient de l'identification mais je ne sais pas comment le résoudre.fichiers Mac Os Qt Copie sur un répertoire sans sudo auth

Voilà mon travail de sorcière fonction de copie parfaitement lors de la copie à la maison (par exemple)

void copyFolder(QString sourceFolder, QString destFolder) 
{ 
    QDir sourceDir(sourceFolder); 
    if(!sourceDir.exists()) 
     return; 
    QDir destDir(destFolder); 
    if(!destDir.exists()) 
    { 
     if(destDir.mkdir(destFolder)) 
     { 
      QStringList files = sourceDir.entryList(QDir::Files); 
      for(int i = 0; i< files.count(); i++) 
      { 
       QString srcName = sourceFolder + "/" + files[i]; 
       QString destName = destFolder + "/" + files[i]; 
       QFile::copy(srcName, destName); 
      } 
      files.clear(); 
      files = sourceDir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); 
      for(int i = 0; i< files.count(); i++) 
      { 
       QString srcName = sourceFolder + "/" + files[i]; 
       QString destName = destFolder + "/" + files[i]; 
       copyFolder(srcName, destName); 
      } 
     } 
     else 
     { 
      qDebug() << "There's a problem while creating : " + destFolder; 
     } 
    } 

} 
+0

l'utilisateur courant a la permission d'écrire à cet emplacement? –

+0

Oui, il a ... malheureusement. C'est pourquoi je ne suis pas sûr d'où cela vient. –

+0

'QDir' manque de rapport d'erreurs. Essayez d'utiliser la fonction 'mkdir' et vérifiez sa valeur de retour et errno. –

Répondre

1

Comme le problème que vous avez est avec des autorisations, vous pouvez résoudre ce problème, mais pas avec Qt seul. La solution d'Apple, pour des raisons de sécurité, est que lorsqu'une application est requise pour accéder à quelque chose avec des privilèges élevés (dans ce cas, le dossier Frameworks), une deuxième application d'aide est requise par launchd et c'est cette 2ème application c'est donné les privilèges pour effectuer la tâche.

Il est un exemple appelé SMJobBless, que vous pouvez voir here: -

Cependant, vous remarquerez qu'il est écrit en Objective-C. Si c'est nouveau pour vous, sachez que c'est seulement une extension de C, donc vous devriez être capable de ramasser les nouvelles pièces raisonnablement facilement; assez pour modifier l'exemple SMJobBless pour vos besoins.

Avec peu de documentation disponible pour SMJobBless, il y a plus à ce sujet here

+0

Pensez-vous que je peux inclure 'ServiceManagement.framework' dans mon application? Ou j'ai l'obligation de traiter avec une application externe? –

+0

Vous pouvez ajouter des cadres Apple dans votre fichier .pro, mais vous devez utiliser la fonctionnalité de l'application auxiliaire. À moins que vous ne développiez un démon, votre application n'aura que des droits d'utilisateur locaux, elle ne pourra donc pas accéder au répertoire Frameworks. La raison pour laquelle l'application d'aide fonctionne, c'est qu'elle est lancée avec des privilèges root, mais signée pour que seule votre application puisse la lancer. Il n'appelle aucune fonction spéciale des Frameworks. – TheDarkKnight

+0

Vous confirmez ce que je pensais: J'ai un problème dans mon système de déploiement d'applications. Je vais ouvrir une autre question pour le résoudre: http://stackoverflow.com/questions/17149796/qt-mac-os-application-deployment-missing-framework –