Mon application Win32 exécute de nombreuses opérations sur disque dans un dossier temporaire désigné pendant son fonctionnement, et il est hors de question de la redessiner sérieusement.Est-il possible de contourner raisonnablement un antivirus analysant le répertoire de travail?
Certains clients ont un logiciel antivirus qui analyse le même répertoire temporaire (il scanne tout simplement). Nous avons essayé de les dissuader - ça ne marche pas, donc c'est hors de question non plus.
De temps en temps (quelque chose comme une fois pour mille opérations de fichiers) mon application essaie d'effectuer une opération sur un fichier qui est à ce moment-là ouvert par l'antivirus et donc verrouillé par le système d'exploitation. Une violation de partage se produit et provoque une erreur dans mon application. Cela se produit environ une fois en trois minutes en moyenne. Le dossier temporaire peut contenir jusqu'à 100 000 fichiers dans la plupart des scénarios classiques. Je n'aime donc pas l'idée de les ouvrir à tout moment, car cela pourrait entraîner l'épuisement des ressources dans certaines conditions de contour.
Y a-t-il une stratégie raisonnable pour que mon application réagisse aux situations où un fichier requis est verrouillé? Peut-être quelque chose comme ça?
for(int i = 0; i < ReasonableNumber; i++) {
try {
performOperation(); // do useful stuff here
break;
} catch(...) {
if(i == ReasonableNumber - 1) {
throw; //not to hide errors if unlock never happens
}
}
Sleep(ReasonableInterval);
}
Est-ce une stratégie viable? Si oui, combien de fois et à quelle fréquence mon application devrait-elle réessayer? Quelles sont les meilleures idées, le cas échéant?
Etes-vous sûr que l'antivirus a verrouillé le fichier? Je suis incapable d'obtenir pourquoi l'antivirus verrouillerait un fichier? Quand il charge un fichier, il devrait permettre le partage. – Canopus
Peut-être l'ouvre-t-il en mode "permettre seulement les lectures en cours" et cela interdit d'écraser le fichier. Je ne peux pas dire avec certitude - les développeurs d'antivirus pourraient mieux savoir que moi. – sharptooth