10

私のウェブサイトから自分のプログラムを Windows 2003 マシンにダウンロードすると、プログラムにブロックがあり、exe を右クリックしてからプロパティを選択し、[ブロック解除] ボタンを選択する必要があります。

ファイルがブロックされているため、十分な権限がない場合の検出をインストーラーに追加したいと考えています。

しかし、ブロックを解除する必要があるこの状態でexeを取得することを簡単に再現することはできません。

この機能をテストできるように、ブロック解除を exe に表示するにはどうすればよいですか?

4

3 に答える 3

21

これは、NTFS ファイル ストリームを使用して行われます。ダウンロードしたファイルに追加された「Zone.Identifier」という名前のストリームがあります。IE7 がストリームに含まれる特定の種類のファイルをダウンロードする場合:

[ZoneTransfer]
ZoneId=3

これを設定する最も簡単な方法は、それらのコンテンツを含むテキスト ファイルを作成し、more を使用してそれを代替ストリームに追加することです。

Zone.Identifier.txt:

[ZoneTransfer]
ZoneId=3

指示:

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

次に、それを確認する方法は、Zone.Identifier ストリームを開いて ZoneId=3 を探すか、ストリームが存在する場合にユーザーがその警告を受け取ると単純に想定することです。

これは権限とは関係がないことに注意することも重要です。管理者にも同じ警告が表示されます。ソースとファイルの種類に完全に関係しています。ユーザーが [このファイルを開く前に常に確認する] チェックボックスをオフにして [実行] をクリックすると、ストリーム全体が消えます。

于 2008-09-25T20:43:09.357 に答える
11

このためにサポートされている API があり、MSDN で文書化されています。MSDN で「Persistent Zone Identifier Object」を検索します。基本的に、インターフェイスを使用CoCreateInstanceCLSID_PersistentZoneIdentifierて要求しIPersistFileます。IPersistFile::Load次に、問題のファイルの名前で呼び出します。次に、ファイルのゾーンを取得するためのIZoneIdentifierインターフェイスと使用にQI を使用します。IZoneIdentifier::GetId「ウェブのマーク」がなかった場合は、 を取得する必要がありますURLZONE_LOCAL_MACHINE。他の返信で言及されている 3 の ZoneId は ですURLZONE_INTERNET。(列挙は呼び出されURLZONE、MSDN にも記載されています。または を参照してください。)またはを呼び出してから をsdk\inc\urlmon.h呼び出すと、「Web のマーク」を削除または変更できます。このすべての詳細については、MSDN を参照してください。幸運を!IZoneIdentifier::RemoveIZoneIdentifier::SetIdIPersistFile::Save

于 2008-11-06T02:38:44.490 に答える
1

これをありがとう、それは私を大いに助けました。

内容を含むバッチファイルを作成すると、プロセスをさらに簡単にすることができます。

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

これにより、Zone.Identifierが生成され、それに応じてファイルにマークが付けられます。

それを実行するには、ファイル名を指定するだけです。たとえば、ファイルの名前がmark.batの場合

mark.bat myfile.txt
于 2012-06-13T15:38:43.390 に答える