Wenn ich mein Programm von meiner Website auf meinen Windows 2003 Rechner herunterlade, hat es einen Block darauf und Sie müssen mit der rechten Maustaste auf die exe klicken, dann Eigenschaften, dann wählen Sie die Schaltfläche "Entsperren".
Ich möchte in meinem Installer eine Erkennung hinzufügen, wenn die Datei blockiert ist und daher nicht über ausreichende Berechtigungen verfügt.
Aber ich kann nicht einfach reproduzieren meine exe in diesem Zustand, wo es entsperrt werden muss.
Wie kann ich die Entsperrung in meiner EXE erscheinen lassen, damit ich diese Funktionalität testen kann?
Dies geschieht mit NTFS File Streams. Zu den heruntergeladenen Dateien wurde ein Stream namens "Zone.Identifier" hinzugefügt. Wenn IE7 bestimmte Dateitypen herunterlädt, enthält dieser Stream:
%Vor%Am einfachsten ist es, eine Textdatei mit diesen Inhalten zu erstellen und mehr hinzuzufügen, um sie dem alternativen Stream hinzuzufügen.
Zone.Identifier.txt:
%Vor%Befehl:
%Vor%Dann sollten Sie versuchen, den Zone.Identifier-Stream zu öffnen und nach ZoneId = 3 zu suchen, oder einfach davon ausgehen, dass, falls der Stream überhaupt vorhanden ist, der Benutzer diese Warnung erhalten wird.
p>Es ist auch wichtig zu beachten, dass dies nichts mit Berechtigungen zu tun hat. Administratoren sehen die gleiche Warnung; Es geht ausschließlich um die Quelle und den Typ der Datei. Der gesamte Stream wird deaktiviert, wenn Benutzer das Kontrollkästchen "Immer vor dem Öffnen dieser Datei fragen" deaktivieren und dann auf Ausführen klicken.
Dafür gibt es eine unterstützte API, die auf MSDN dokumentiert ist. Suchen Sie auf MSDN nach "Persistent Zone Identifier Object". Grundsätzlich haben Sie CoCreateInstance
mit CLSID_PersistentZoneIdentifier
und fordern eine IPersistFile
Schnittstelle an. Sie rufen dann IPersistFile::Load
mit dem Namen der fraglichen Datei auf. Als nächstes QI für eine IZoneIdentifier
-Schnittstelle und IZoneIdentifier::GetId
verwenden, um die Zone der Datei zu erhalten. Wenn es keine "Markierung des Netzes" gab, sollten Sie URLZONE_LOCAL_MACHINE
erhalten. Die ZoneId von 3, die in der anderen Antwort erwähnt wird, ist URLZONE_INTERNET
. (Die Aufzählung heißt URLZONE
und ist auch auf MSDN dokumentiert, oder siehe sdk\inc\urlmon.h
.) Sie können die "Marke des Webs" entfernen oder ändern, indem Sie IZoneIdentifier::Remove
oder IZoneIdentifier::SetId
aufrufen und dann IPersistFile::Save
aufrufen. Es gibt weitere Details zu all dem auf MSDN. Viel Glück!
Danke, das hat mir sehr geholfen.
Sie können den Vorgang noch einfacher gestalten, wenn Sie eine Stapeldatei mit dem Inhalt erstellen.
%Vor%Dies erzeugt den Zone.Identifier für Sie und markiert die Datei entsprechend.
Um es auszuführen, geben Sie einfach den Dateinamen ein, z. wenn die Datei mark.bat
heißt %Vor%Tags und Links security windows-server-2003 nsis