Воспроизведение заблокированной опции exe "разблокировать" в свойствах файла в windows 2003
когда я загружаю свою программу с моего сайта на мою машину windows 2003, на ней есть блок, и вы должны щелкнуть правой кнопкой мыши на exe, затем properties, затем выберите кнопку "Разблокировать".
Я хотел бы добавить обнаружение в мой установщик, когда файл заблокирован и, следовательно, не имеет достаточных разрешений.
но я не могу eaisly воспроизвести получение моего exe в этом состоянии, где он должен быть разблокирован.
Как я могу получить разблокировать, чтобы появиться на моем exe, чтобы я мог проверить эту функциональность?
3 ответов
это делается с помощью потоков файлов NTFS. Существует поток с именем " Zone.Идентификатор " добавлен в загруженные файлы. Когда IE7 загружает определенные типы файлов, поток содержит:
[ZoneTransfer]
ZoneId=3
самый простой способ установить его-создать текстовый файл с этим содержимым в нем и использовать больше, чтобы добавить его в альтернативный поток.
зоны.Идентификатор.txt:
[ZoneTransfer]
ZoneId=3
:
more Zone.Identifier.txt > file.exe:Zone.Identifier
тогда, способ для вас проверить это было бы попытаться открыть Зона.Identifier stream и найдите ZoneId=3 или просто предположите, что если поток вообще существует, ваш пользователь получит это предупреждение.
важно также отметить, что это не имеет ничего общего с правами. Администраторы видят то же предупреждение; это полностью связано с источником и типом файла. Весь поток уходит, когда пользователи снимают флажок "всегда спрашивать перед открытием этого файла", а затем нажмите кнопку Выполнить.
для этого есть поддерживаемый API, задокументированный на MSDN. Найдите в MSDN "объект идентификатора постоянной зоны". В основном вы CoCreateInstance
с CLSID_PersistentZoneIdentifier
и IPersistFile
интерфейс. Вы тогда позвоните IPersistFile::Load
С именем файла в вопрос. Далее, QI для IZoneIdentifier
интерфейс и использовать IZoneIdentifier::GetId
для получения зоны файла. Если не было "знака сети", вы должны получить URLZONE_LOCAL_MACHINE
. ZoneId 3, упомянутый в другом ответе, -URLZONE_INTERNET
. (Перечисление называется URLZONE
и также документируется на MSDN или см. sdk\inc\urlmon.h
.) Вы можете удалить или изменить "знак сети", позвонив IZoneIdentifier::Remove
или IZoneIdentifier::SetId
а потом звоните IPersistFile::Save
. Есть более подробная информация обо всем этом на MSDN. Удачи!
Спасибо за это, это мне очень помогло.
вы можете сделать процесс еще проще, если вы создадите пакетный файл с содержимым.
echo [ZoneTransfer] > Zone.Identifier
echo ZoneId=3 >> Zone.Identifier
more Zone.Identifier > %1:Zone.Identifier
это создаст зону.Идентификатор для вас и отметьте файл соответствующим образом.
чтобы запустить его, просто укажите имя файла, например, если файл называется mark.летучая мышь!--3-->
mark.bat myfile.txt