Frage

Wenn ich mein Programm von meiner Website zu meinem Windows 2003-Rechner herunterladen, hat es einen Block auf, und Sie haben klicken Sie auf den exe nach rechts, dann Eigenschaften, dann wählen Sie die Schaltfläche „Nicht mehr blocken“.

Ich möchte Erkennung in meinem Installer für hinzufügen, wenn die Datei gesperrt ist und daher nicht genügend Berechtigungen verfügt.

Aber ich kann eaisly nicht reproduzieren meine exe in diesem Zustand erhalten, wo es braucht nicht blockiert zu sein.

Wie kann ich die Entsperrung auf meine exe erscheinen, so kann ich diese Funktionalität testen?

War es hilfreich?

Lösung

Dies ist mit NTFS File Streams getan. Es gibt einen Strom namens „Zone.Identifier“ hinzugefügt, um die heruntergeladenen Dateien. Wenn IE7 lädt bestimmte Dateitypen, dass Strom enthält:

[ZoneTransfer]
ZoneId=3

Der einfachste Weg, es zu setzen, ist eine Textdatei mit diesen Inhalten in ihm zu erstellen und vieles mehr verwenden, um den alternativen Strom hinzuzufügen.

Zone.Identifier.txt:

[ZoneTransfer]
ZoneId=3

Befehl:

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

Dann wird der Weg für Sie, um es zu überprüfen wäre, zu versuchen, den Zone.Identifier Stream zu öffnen und suchen Sie nach ZoneID = 3, oder einfach davon ausgehen, dass, wenn der Strom überhaupt existiert, dass Ihre Benutzer diese Warnung erhalten.

Es ist auch wichtig zu beachten, dass dies nichts mit Berechtigungen zu tun hat. Administratoren sehen die gleiche Warnung; es ist ganz mit der Quelle und die Art der Datei zu tun. Der gesamte Strom geht weg, wenn Benutzer das Häkchen bei „Immer fragen vor dem Öffnen dieser Datei“ -Box und dann auf Ausführen.

Andere Tipps

Es ist eine unterstützte API für diese, auf MSDN dokumentiert. Suchen Sie auf MSDN für "Persistent Identifier Zone Object". Grundsätzlich CoCreateInstance Sie mit CLSID_PersistentZoneIdentifier und fordern eine IPersistFile Schnittstelle. Anschließend rufen Sie IPersistFile::Load mit dem Namen der Datei in Frage. Als nächstes QI für eine IZoneIdentifier Schnittstelle und Verwendung IZoneIdentifier::GetId um die Zone der Datei zu erhalten. Wenn es keine „-Markierung der Bahn“ ist, sollten Sie URLZONE_LOCAL_MACHINE bekommen. Die Zonen-ID von 3 in der anderen Antwort erwähnt ist URLZONE_INTERNET. (Die Aufzählung heißt URLZONE und wird auch auf MSDN dokumentiert, oder sdk\inc\urlmon.h sehen.) Sie können die „Zeichen der Bahn“ entfernen oder ändern, indem IZoneIdentifier::Remove oder IZoneIdentifier::SetId aufrufen und dann IPersistFile::Save nennen. Es gibt mehr Details über all dies auf MSDN. Viel Glück!

Vielen Dank für diese es hat mir sehr geholfen.

Sie können den Prozess noch einfacher machen, wenn Sie eine Batch-Datei mit dem Inhalt erstellen.

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

Dies wird den Zone.Identifier für Sie generiert und die Datei entsprechend markieren.

So führen sie liefern nur die Dateinamen z.B. wenn die Datei mark.bat genannt

mark.bat myfile.txt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top