Wiedergabe der blockierten exe "Entsperren" -Option in Dateieigenschaften in Windows 2003

7

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?

    
Brian R. Bondy 25.09.2008, 19:53
quelle

3 Antworten

19

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.

    
HitScan 25.09.2008, 20:43
quelle
11

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!

    
Jonas Barklund 06.11.2008 02:38
quelle
1

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%     
alrutherford 13.06.2012 15:38
quelle