Riproduzione dell'exe bloccato & # 8220; sblocco & # 8221; opzione nelle proprietà del file in Windows 2003

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

Domanda

Quando scarico il mio programma dal mio sito Web sulla mia macchina Windows 2003, ha un blocco su di esso e devi fare clic con il pulsante destro del mouse su exe, quindi proprietà, quindi selezionare il pulsante " Unblock " ;.

Vorrei aggiungere il rilevamento nel mio programma di installazione per quando il file è bloccato e quindi non dispone di autorizzazioni sufficienti.

Ma non riesco a riprodurre con entusiasmo ottenere la mia exe in questo stato in cui deve essere sbloccata.

Come posso far apparire lo sblocco sul mio exe in modo da poter testare questa funzionalità?

È stato utile?

Soluzione

Questo viene fatto usando i flussi di file NTFS. Esiste uno stream chiamato " Zone.Identifier " aggiunto ai file scaricati. Quando IE7 scarica alcuni tipi di file che lo stream contiene:

[ZoneTransfer]
ZoneId=3

Il modo più semplice per impostarlo è creare un file di testo con quei contenuti e usarne di più per aggiungerlo allo stream alternativo.

Zone.Identifier.txt:

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

Comando:

<*>

Quindi, il modo per verificarlo sarebbe quello di provare ad aprire lo stream Zone.Identifier e cercare ZoneId = 3, o semplicemente supporre che se lo stream esiste, l'utente riceverà tale avviso.

È anche importante notare che questo non ha nulla a che fare con le autorizzazioni. Gli amministratori visualizzano lo stesso avviso; ha a che fare interamente con l'origine e il tipo di file. L'intero flusso scompare quando gli utenti deselezionano " Chiedi sempre prima di aprire questo file " e quindi fai clic su Esegui.

Altri suggerimenti

Esiste un'API supportata per questo, documentata su MSDN. Cerca su MSDN "Oggetto identificatore di zona persistente". Fondamentalmente CoCreateInstance con CLSID_PersistentZoneIdentifier e richiedi un'interfaccia IPersistFile . Quindi si chiama IPersistFile :: Load con il nome del file in questione. Quindi, QI per un'interfaccia IZoneIdentifier e utilizzare IZoneIdentifier :: GetId per ottenere la zona del file. Se non è presente alcun segno di "quotazione del Web", dovresti ottenere URLZONE_LOCAL_MACHINE . Il ZoneId di 3 menzionato nell'altra risposta è URLZONE_INTERNET . (L'enumerazione si chiama URLZONE ed è anche documentata su MSDN, oppure vedere sdk \ inc \ urlmon.h .) Puoi rimuovere o modificare il segno " del web " ; chiamando IZoneIdentifier :: Remove o IZoneIdentifier :: SetId e quindi chiamando IPersistFile :: Save . Ci sono maggiori dettagli su tutto ciò su MSDN. Buona fortuna!

Grazie per questo mi ha aiutato molto.

Puoi rendere il processo ancora più semplice se crei un file batch con i contenuti.

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

Questo genererà Zone.Identifier per te e contrassegnerà il file di conseguenza.

Per eseguirlo basta fornire il nome del file, ad es. se il file si chiama mark.bat

mark.bat myfile.txt
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top