2008-09-25 17 views
7

Lorsque je télécharge mon programme de mon site web sur ma machine Windows 2003, il y a un bloc dessus et vous devez cliquer droit sur l'exe, puis sur les propriétés, puis sélectionnez le bouton "Débloquer".Reproduire l'option exe "débloquer" bloquée dans les propriétés du fichier dans Windows 2003

Je voudrais ajouter la détection dans mon programme d'installation pour quand le fichier est bloqué et n'a donc pas assez d'autorisations.

Mais je ne peux pas me reproduire pour obtenir mon exe dans cet état où il doit être débloqué.

Comment puis-je faire apparaître le déblocage sur mon exe afin que je puisse tester cette fonctionnalité?

Répondre

19

Ceci est fait en utilisant les flux de fichiers NTFS. Il y a un flux nommé "Zone.Identifier" ajouté aux fichiers téléchargés. Lorsque IE7 télécharge certains types de fichier flux contient:

[ZoneTransfer] 
ZoneId=3 

La façon la plus simple de le mettre est de créer un fichier texte avec les contenus en elle, et utiliser plus pour l'ajouter au flux alternatif.

Zone.Identifier.txt:

[ZoneTransfer] 
ZoneId=3 

Commande:

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

Ensuite, le chemin pour vous de vérifier qu'il serait d'essayer d'ouvrir le flux Zone.Identifier et chercher IDZone = 3, ou supposer simplement que si le flux existe à tout ce que 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; c'est à faire entièrement 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 clique sur Exécuter.

+0

Bonne information, merci pour votre aide. –

+0

C'est exactement l'information que je cherchais –

11

Il existe une API prise en charge pour cela, documentée sur MSDN. Effectuez une recherche sur MSDN pour "Persistent Zone Identifier Object". Fondamentalement, vous CoCreateInstance avec CLSID_PersistentZoneIdentifier et demander une interface IPersistFile. Vous appelez alors 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 et est également documentée sur MSDN ou voir sdk\inc\urlmon.h.) Vous pouvez supprimer ou modifier la «marque du Web» en appelant IZoneIdentifier::Remove ou IZoneIdentifier::SetId, puis en appelant le IPersistFile::Save. Il y a plus de détails sur tout cela sur MSDN. Bonne chance!

1

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. Cela générera le Zone.Identifier pour vous et marquera le fichier en conséquence.

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

mark.bat myfile.txt