Question

J'ai un service Windows qui met à jour notre produit. Il copie les fichiers du produit dans un répertoire temporaire, généralement "C: \ Windows \ Temp", corrige les fichiers binaires, puis utilise MoveFileEx pour copier les fichiers dans le répertoire d'installation lors du redémarrage, généralement sous "C: \ Program Files \ Produit " ;. Les fichiers du répertoire d'installation héritent de leurs attributs de sécurité du dossier parent. Après la copie, le correctif et le redémarrage, il manque des listes de contrôle d'accès aux fichiers du répertoire d'installation. Plus précisément, les fichiers ne disposent plus de la liste de contrôle d'accès pour le groupe Utilisateurs; les utilisateurs ne peuvent donc plus exécuter le programme après le redémarrage.

Quelqu'un peut-il expliquer ce qui se passe ici? Il semble que lors de la copie du répertoire d'installation vers le répertoire temporaire, les fichiers héritent des ACL du répertoire temporaire. Sur le fichier MoveFileEx / Reboot, toutefois, les fichiers héritent uniquement des ACL communes aux répertoires d’installation et temporaires.

Était-ce utile?

La solution

Sous Windows, si vous copiez un fichier, le fichier prend les ACL du répertoire de destination. Si vous déplacez un fichier, la liste de contrôle d’accès remplace le fichier hérité de ce répertoire. Je ne sais pas comment MoveFileEx pourrait fonctionner différemment sur un fichier.

Le répertoire temporaire est généralement situé sous le profil de l'utilisateur (% TMP% et% TEMP% désignent généralement ici), de sorte que la copie de fichiers à cet emplacement bénéficiera d'autorisations pour cet utilisateur. Déplacer ces fichiers dans le répertoire des fichiers du programme n’aura que les droits de cet utilisateur et ne pourra donc être exécuté que par l’utilisateur qui l’installe.

Autres conseils

Une solution potentielle consiste à appliquer des correctifs aux copies des fichiers dans le même répertoire mais avec des noms différents. Après le redémarrage, les versions corrigées pourraient être échangées. Vous pouvez également procéder à un redémarrage puis à les corriger sur place, puis à les sauvegarder dans le répertoire temp au cas où une restauration manuelle serait requise.

Si vous souhaitez vraiment les déplacer vers un autre emplacement, la création d'un dossier temporaire au même endroit que les fichiers à patcher aiderait les autorisations à rester identiques en supposant que le répertoire utilise des autorisations héritées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top