En complément de la réponse d'Eric Leschinski, et parce que c'est stackoverflow, une solution programmatique :
Windows utilise des fourches de fichiers cachés pour marquer le contenu comme "téléchargé". En les tronquant, on débloque le fichier. Le nom du flux utilisé pour les CHM est "Zone.Identifier". On peut accéder aux flux en ajoutant :streamname à l'ouverture du fichier. (gardez des copies de sauvegarde la première fois, au cas où votre RTL gâcherait tout !)
En Delphi, cela ressemblerait à ceci :
var f : file;
begin
writeln('unblocking ',s);
assignfile(f,'some.chm:Zone.Identifier');
rewrite(f,1);
truncate(f);
closefile(f);
end;
On m'a dit que sur les systèmes de fichiers non bifurqués (comme FAT32), il y a des fichiers cachés, mais je ne suis pas encore allé au fond des choses.
P.s. La fonction DeleteFile() de Delphi devrait également reconnaître les fourches.