Reproducción de la opción "desbloquear" exe bloqueada en las propiedades del archivo en Windows 2003

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

Pregunta

Cuando descargo mi programa desde mi sitio web a mi máquina con Windows 2003, tiene un bloqueo y debe hacer clic derecho en el archivo exe, luego en Propiedades, luego seleccionar el botón " Desbloquear " ;.

Me gustaría agregar detección en mi instalador para cuando el archivo esté bloqueado y, por lo tanto, no tenga suficientes permisos.

Pero no puedo reproducir fácilmente mi exe en este estado en el que se debe desbloquear.

¿Cómo puedo hacer que el desbloqueo aparezca en mi exe para poder probar esta funcionalidad?

¿Fue útil?

Solución

Esto se hace usando secuencias de archivos NTFS. Hay un flujo llamado "quot. Zone.Identifier" añadido a los archivos descargados. Cuando IE7 descarga ciertos tipos de archivos que contienen secuencias:

[ZoneTransfer]
ZoneId=3

La forma más sencilla de configurarlo es crear un archivo de texto con esos contenidos y usar más para agregarlo a la secuencia alternativa.

Zone.Identifier.txt:

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

Comando:

<*>

Entonces, la forma de verificarlo sería intentar abrir la secuencia Zone.Identifier y buscar ZoneId = 3, o simplemente asumir que si existe la corriente, el usuario recibirá esa advertencia. p>

También es importante tener en cuenta que esto no tiene nada que ver con los permisos. Los administradores ven la misma advertencia; Tiene que ver completamente con la fuente y el tipo de archivo. El flujo completo desaparece cuando los usuarios desactivan la casilla " Preguntar siempre antes de abrir este archivo " y luego haga clic en Ejecutar.

Otros consejos

Hay una API compatible para esto, documentada en MSDN. Busque en MSDN para " Objeto identificador de zona persistente " ;. Básicamente, usted CoCreateInstance con CLSID_PersistentZoneIdentifier y solicita una interfaz IPersistFile . Luego llama a IPersistFile :: Load con el nombre del archivo en cuestión. A continuación, QI para una interfaz IZoneIdentifier y use IZoneIdentifier :: GetId para obtener la zona del archivo. Si no había una " marca de la web " ;, debería obtener URLZONE_LOCAL_MACHINE . El ZoneId de 3 mencionado en la otra respuesta es URLZONE_INTERNET . (La enumeración se llama URLZONE y también está documentada en MSDN, o vea sdk \ inc \ urlmon.h .) Puede eliminar o cambiar la marca " de la web " ; llamando a IZoneIdentifier :: Remove o IZoneIdentifier :: SetId y luego llame a IPersistFile :: Save . Hay más detalles sobre todo esto en MSDN. Buena suerte!

Gracias por esto me ayudó mucho.

Puede hacer que el proceso sea aún más fácil si crea un archivo por lotes con el contenido.

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

Esto generará el Zone.Identifier por ti y marcará el archivo como corresponda.

Para ejecutarlo, simplemente proporcione el nombre del archivo, p. ej. si el archivo se llama mark.bat

mark.bat myfile.txt
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top