Воспроизведение заблокированной опции 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