Reproduction de l’option «unblock» bloqué dans les propriétés de fichier dans Windows 2003

StackOverflow https://stackoverflow.com/questions/135600

Question

Lorsque je télécharge mon programme depuis mon site Web sur ma machine Windows 2003, il est bloqué et vous devez cliquer avec le bouton droit sur le fichier exe, puis sur Propriétés, puis sélectionner le bouton "Débloquer".

Je souhaite ajouter une détection dans mon programme d'installation lorsque le fichier est bloqué et qu'il ne dispose donc pas d'autorisations suffisantes.

Mais je ne peux pas reproduire rapidement en mettant mon exe dans cet état où il doit être débloqué.

Comment puis-je faire en sorte que le déblocage apparaisse sur mon fichier exe pour pouvoir tester cette fonctionnalité?

Était-ce utile?

La solution

Ceci est fait en utilisant NTFS File Streams. Il existe un flux nommé "Zone.Identifier". ajouté aux fichiers téléchargés. Lorsque IE7 télécharge certains types de fichiers que ce flux contient:

[ZoneTransfer]
ZoneId=3

Le moyen le plus simple de le définir consiste à créer un fichier texte contenant ce contenu et à l'utiliser davantage pour l'ajouter au flux alternatif.

Zone.Identifier.txt:

more Zone.Identifier.txt > file.exe:Zone.Identifier

Commande:

<*>

Ensuite, pour le vérifier, essayez d’ouvrir le flux Zone.Identifier et cherchez ZoneId = 3, ou supposez simplement que si le flux existe, votre utilisateur recevra cet avertissement.

Il est également important de noter que cela n'a rien à voir avec les autorisations. Les administrateurs voient le même avertissement; tout à fait avec la source et le type de fichier. Le flux entier disparaît lorsque les utilisateurs décochent la case "Toujours demander avant d'ouvrir ce fichier". puis cliquez sur Exécuter.

Autres conseils

Il existe pour cela une API prise en charge, documentée sur MSDN. Recherchez sur "MSDN" l'objet "Identifiant de zone persistante". En gros, vous CoCreateInstance avec CLSID_PersistentZoneIdentifier et demandez une interface IPersistFile . Vous appelez ensuite IPersistFile :: Load avec le nom du fichier en question. Ensuite, QI pour une interface IZoneIdentifier et utilisez IZoneIdentifier :: GetId pour obtenir la zone du fichier. S'il n'y avait pas de "marque du Web", vous devriez obtenir URLZONE_LOCAL_MACHINE . Le ZoneId de 3 mentionné dans l'autre réponse est URLZONE_INTERNET . (L'énumération est appelée URLZONE . Elle est également documentée sur MSDN ou à l'adresse sdk \ inc \ urlmon.h .) Vous pouvez supprimer ou modifier le symbole "Web". ; en appelant IZoneIdentifier :: Remove ou IZoneIdentifier :: SetId , puis appelez IPersistFile :: Save . Il y a plus de détails sur tout cela sur MSDN. Bonne chance!

Merci pour cela, cela m'a beaucoup aidé.

Vous pouvez rendre le processus encore plus facile si vous créez un fichier de commandes avec le contenu.

echo [ZoneTransfer] > Zone.Identifier
echo ZoneId=3 >> Zone.Identifier
more Zone.Identifier > %1:Zone.Identifier

Ceci générera le Zone.Identifier pour vous et marquera le fichier en conséquence.

Pour l’exécuter, indiquez simplement le nom du fichier, par exemple. si le fichier s'appelle mark.bat

mark.bat myfile.txt
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top