developers blog

ダウンロードしたファイルのセキュリティ警告を削除する (C#)

はじめに

インターネットからダウンロードしてきた、C# のソリューションファイルを開こうとすると、「信頼性の高い発行元からのプロジェクトのみを開くようにしてください。」とセキュリティ警告が表示されたり、開いても、ビルドに失敗することがあります。
これはコンピューターを保護するために、代替データストリーム (Alternate Data Stream 以下 ADS) と呼ばれる隠しファイルに情報が保存されるためです。

そのため、ADS を削除することで、正常にソリューションファイルを実行することができるようになります。

代替データストリーム (ADS) の確認方法

Windows の場合、コマンドプロンプトを開き、dir コマンドのオプションに ADS を表示するための /R を付けて実行します。

1>dir /R
2(省略)
32018/10/12 09:39    <DIR>    .
42018/10/12 09:39    <DIR>    ..
52018/10/12 09:59             2,973 Test.sln
6                                26 Test.sln:Zone.Identifier:$DATA

上記の場合は、Test.sln ファイルに紐付けられている Zone.Identifier という ADS が表示されています。

ADS の中身を確認したいときは、以下のようにします。

1>more < Test.sln:Zone.Identifier
2[ZoneTransfer]
3ZoneId=3

ここの ZonId=3 が、インターネットゾーンを表しています。

代替データストリーム (ADS) の削除方法

ADS を削除する方法は、以下のようなものがあります。

ファイルのプロパティから削除する

エクスプローラから該当のファイルを右クリックしてプロパティを開きます。

プロパティの下の方にセキュリティという項目とブロックの解除ボタンがある

セキュリティの、「このファイルは他のコンピューターから取得したものです。このコンピューターを保護するため、このファイルへのアクセスはブロックされる可能性があります。」という文言の横にある、「ブロックを解除」ボタンをクリックすることで削除されます。
この場合、ファイル毎に一つ一つプロパティを開く必要があり、大変手間がかかります。一度に、全てのファイルの代替データストリームを削除するには、次の方法があります。

streams.exe を使用して削除する

以下のページから、Streams.zip ファイルをダウンロードします。

Streams

zip ファイルを解凍し、その中にある streams.exe を使用します。
ファイルを指定して削除するには、コマンドプロンプトを開き、以下のコマンドを実行します。

1>streams -d Test.sln
2
3streams v1.60 - Reveal NTFS alternate streams.
4Copyright (C) 2005-2016 Mark Russinovich
5Sysinternals - www.sysinternals.com
6
7C:\test\Test.sln:
8   Deleted :Zone.Identifier:$DATA

streams.exe のオプションは以下の通りです。

1>streams -h
2
3streams v1.60 - Reveal NTFS alternate streams.
4Copyright (C) 2005-2016 Mark Russinovich
5Sysinternals - www.sysinternals.com
6
7usage: streams [-s] [-d] <file or directory>
8-s     Recurse subdirectories
9-d     Delete streams
10-nobanner
11       Do not display the startup banner and copyright message.
  • -s : サブディレクトリを再帰処理します
  • -d : ストリームを削除します

フォルダ内のすべてのファイル、および、サブディレクトリを再帰的に削除するには以下のように指定します。

1>streams -d -s *

PowerShell