5

C#/.NET と Microsoft.Office.Interop.Word を使用して、非常に古い (バイナリ) Word ファイルを開こうとしています。以下のスニペットを使用してこのファイルを開こうとすると、「セキュリティセンターのファイル ブロック設定によってブロックされているファイルの種類を開こうとしています」という COMException が表示されて失敗します。

これは、MS Word で同じファイルを開くときにも発生していましたが、トラスト センターで見つかった設定を調整した後、問題なく動作するようになりました。ただし、C# を使用してファイルを開くことはまだできません。VS2010 がこれらの設定をキャッシュするのか、それとも独自の設定をどこかに使用するのかを知っている人はいますか? また、同じスニペットを使用して (Word で設定を修正した後) 新しいプロジェクトを作成して、それが役立つかどうかを確認しようとしましたが、そうではありませんでした。

Word.Application app;

string file = "<filename>";

app = new Word.Application();

try
{
    app.Documents.Open(file);
}
catch (COMException e)
{
    string s = e.Message;
}
4

1 に答える 1

7

これは、NTFS ファイル システムでサポートされる代替データ ストリームで実装されます。filename:streamこのようなストリームには、次の構文でアクセスします。ファイル ブロック機能の情報を格納するストリーム名はZone.Identifier:$DATA. ファイルをコピーしたプログラム (通常はブラウザ) によって書き込まれます。

それらは DIR /R オプションで表示できます。SysInternalsのStreams ユーティリティを使用すると、それらを一覧表示および削除できます。それを取り除く愚かな方法は、.zip アーカイブやフラッシュ ドライブなどの代替データ ストリームをサポートしていないファイル システムにコピーし、それを元に戻すことです。

ストリームのコンテンツを表示したり、次のようなコマンドで編集したりできます。次のようnotepad filename:zone.identifierに表示されます。

[ZoneTransfer]
ZoneId=3

ZoneId 値は、ファイルの発信元を識別します。値は -1=未指定、0=ローカル マシン、1=イントラネット、2=信頼済み、3=インターネット、4=信頼されていない。ただし、メモ帳でできることは .NET ではできません:。ファイル名に文字を使用することは明示的に禁止されています。ファイルのブロック機能を明示的にオーバーライドして、人間がこれに対処することを意図しています。エクスプローラーでファイルを右クリックし、[プロパティ] をクリックして、[ブロックの解除] ボタンをクリックします。これにより、ストリームが削除されます。最初のリンクに記載されている Powershell コマンドレットに注意してください。

于 2013-11-05T14:17:10.740 に答える