Reproduzindo o exe bloqueado opção “desbloquear” nas propriedades de arquivo no Windows 2003

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

Pergunta

Quando eu baixar meu programa do meu site para meus windows 2003 máquina, ele tem um bloco nele e você tem que clicar sobre o exe, então propriedades, em seguida, selecione o botão "Desbloquear".

Eu gostaria de adicionar a detecção em meu instalador para quando o arquivo está bloqueado e, portanto, não tem permissões suficientes.

Mas eu não posso eaisly reproduzir recebendo minha exe neste estado onde ele precisa ser desbloqueado.

Como posso obter o desbloqueio para aparecer no meu exe para que eu possa testar esta funcionalidade?

Foi útil?

Solução

Isso é feito usando fluxos de arquivo NTFS. Há um fluxo chamado "Zone.Identifier" adicionados a arquivos baixados. Quando IE7 faz o download de determinados tipos de arquivo que o fluxo contém:

[ZoneTransfer]
ZoneId=3

A maneira mais simples para defini-la é criar um arquivo de texto com esses conteúdos na mesma, e usar mais para adicioná-lo à corrente alternada.

Zone.Identifier.txt:

[ZoneTransfer]
ZoneId=3

Comando:

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

Então, o caminho para você verificar que seria para tentar abrir o fluxo Zone.Identifier e olhar para Identificação_da_Zona = 3, ou simplesmente assumir que se o fluxo existe em tudo que o usuário receberá esse aviso.

Também é importante notar que isso não tem nada a ver com permissões. Administradores ver o mesmo aviso; tem a ver inteiramente com a origem eo tipo de arquivo. todo o fluxo vai embora quando os usuários desmarque a caixa "Sempre perguntar antes de abrir este arquivo" e clique em Executar.

Outras dicas

Há uma API suportada para este, documentado no MSDN. Pesquisar no MSDN para "persistente objeto Zona Identifier". Basicamente você CoCreateInstance com CLSID_PersistentZoneIdentifier e solicitar uma interface IPersistFile. Você, então, chamar IPersistFile::Load com o nome do arquivo em questão. Em seguida, QI para uma interface IZoneIdentifier e uso IZoneIdentifier::GetId obter a zona do arquivo. Se não houvesse a "marca da web", você deve obter URLZONE_LOCAL_MACHINE. O Identificação_da_Zona de 3 mencionado na outra resposta é URLZONE_INTERNET. (A enumeração é chamado URLZONE e também está documentado no MSDN, ou ver sdk\inc\urlmon.h.) Você pode remover ou mudar a "marca da web", chamando IZoneIdentifier::Remove ou IZoneIdentifier::SetId e IPersistFile::Save então chamada. Há mais detalhes sobre tudo isso no MSDN. Boa sorte!

Obrigado por isso me ajudou muito.

Você pode tornar o processo ainda mais fácil se você criar um arquivo de lote com o conteúdo.

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

Isto irá gerar o Zone.Identifier para você e marcar o arquivo em conformidade.

Para executá-lo basta fornecer o nome do arquivo, por exemplo, se o arquivo é chamado mark.bat

mark.bat myfile.txt
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top