4

私が取り組んでいる既存の (Web ベースの) プロジェクトは、クライアント データを使用し、クライアントの名前をファイル名として使用してレポートを保存します。残念ながら、このクライアント名はフィルタリングされなかったため、誰かがテスト目的でコロン (「workshop:alex」など) を含むクライアント名を入力しました。これにより、たまたまNTFSシステムで有効なファイル名workshop:alex.pdfが生成されます。(これは、「alex.pdf」という別のデータ ストリームを含む「workshop」という名前のファイルを作成するためです。アプリケーションはファイル名も保存していたため、同じ ADS を参照しただけなので、ファイル名を再読み込みしても問題はありませんでした。したがって、 、誰もこの問題に気づきませんでした...
しかし、最近このプロジェクトに取り組み始めたので、IIS 7 を使用して Windows 7 64 ビットに移行する必要があります。突然、これらの ADS ファイルでサイトが機能しなくなりました! 原因を突き止め、過去に失敗しなかった理由を理解するのに、それほど時間はかかりませんでした。(そして、これをチェックしなかった以前の開発者も呪いました!) しかし、なぜ Windows 7 で失敗するのか疑問に思っています... それで、誰か知っていますか?


ところで、修正があります!ファイル名がフィルタリングされるようになり、問題が解決されました。その理由が気になります。新しい Windows バージョンでこれらの問題が発生する原因は何ですか?


アプリケーションについて: これは、ローカルの IIS インストールと WIN32 クライアント アプリケーションを組み合わせたものです。基本的に、レポート ソリューションは Web アプリケーションとして開発され、以前はレポート目的で Word を使用していたデスクトップ アプリケーションが作成されました。一部のマネージャーは、デスクトップ アプリケーションが Web アプリケーションのロジックを使用して代わりにレポートを生成することをお勧めします。そして、私は認めます:それはあまり明るいアイデアではありませんでした...
その結果、すべてのユーザーが Web アプリケーションを含むシステムで IIS を実行し、同じマシン上にデスクトップ アプリケーションも持つことになります。それらが通信できるようにするために、C# で別の Web サービスが作成され、Web アプリケーションは従来の ASP でビルドされ、デスクトップ アプリケーションは Delphi でビルドされました。デスクトップ アプリケーションは、ローカル Web サービスを介してデータベースにデータを送信し、ローカル Web アプリケーションにログインして、ダウンロードするレポートを生成するように指示します...
この Coding Hell のどこで問題が発生するのかは、あまり明確ではありません。ただし、ファイル名はデスクトップ アプリケーションのデータに基づいており、コロンが含まれている場合があるため、通常のファイル名ではなく ADS が作成されることがあります。Windows 7 より前のバージョンの Windows では、これは正しく動作しているように見えました。ファイルが書き込まれ、IIS はそれらを PDF ファイルとしてデスクトップ アプリケーションにも提供します。(そこから、通常のファイル名を使用して「名前を付けて保存」できます。
このアプリケーションは Windows 7 (64 ビット) では壊れます。これは、コロンがデータに追加されたときにファイルを ADS ストリームに書き込むことができるためです。生成されたファイル名からコロンを除外していますが、この問題の考えられる原因を知りたいので、好奇心からの質問です...

4

4 に答える 4

2

エラー情報なしで言うのは難しいです。あなたはおそらくすでにそれをチェックアウトしましたが、:

  • ファイルを FAT ボリュームに保存している可能性はありますか?
  • アンチウイルスが作動して ADS を攻撃として扱っているのではないでしょうか?

それにもかかわらず、私は今この問題に非常に興味があります。これに対する答えが得られたら、共有してください:)


編集:時間がないかもしれませんが、これは私がすることです:

  1. IIS を管理者として実行してみて、まだ問題があるかどうかを確認してください。
  2. はいの場合、これはおそらく IIS7 の問題、または Win 7 の Scripting.FileSystem の問題です。
  3. そうでない場合は、これがセキュリティ関連であると確信しています。IIS を非管理者に戻す
  4. 出力フォルダー (ADS を作成/読み取る場所) の IIS ユーザーに完全な制御を与える
  5. これは正常に動作するはずです。それにもかかわらずテストする
  6. フォルダーのアクセス許可を 1 つずつ削除し、いつ問題を再現できるかを確認します。

私の推測では、おそらく「READ ATTRIBUTES」または「READ EXTENDED ATTRIBUTES」の権限になるでしょう。

それでも答えが得られない場合は、Sysinternal Process Monitor を起動して、実際に何が起こっているかを確認してください。彼らのツール「Streams」も役立つかもしれません。

于 2011-02-16T16:31:54.187 に答える
1

一般に、ネットワーク共有は代替データ ストリームをサポートしていないため、仕様がサポートしていないため、「移行」によってサイトと結果のファイルがコピーされた場合、すべての ADS ストリームが失われます。

technet sysinternals ツールをダウンロードして、ファイルが実際に新しいサーバーに ADS ストリームを持っていることを確認することをお勧めします。 http://technet.microsoft.com/en-us/sysinternals/bb545046

于 2011-02-16T16:47:34.917 に答える
0

workshop.pdf:alex.pdfの代わりに名前を読んでいworkshop:alex.pdfますか? あなたのプログラムがどのように機能するかはわかりませんが、拡張子を自動追加しようとして、ファイルが見つからないことがありますか (ファイルが存在しないため)。

于 2011-02-18T09:24:38.233 に答える
0

これがプログラミングにも当てはまるかどうかはわかりませんが (そう思います)、Windows 7 は、コマンド ライン経由で ADS にアクセスしようとすると、ファイル名のコロンを除外します。ADS にアクセスしようとするときにファイル名を引用符で囲んでおけば、この問題は発生しません。ファイル名を引用符で囲むと、古い OS でも機能するはずなので、クライアント間の互換性の問題について心配する必要はありません。

CMD の例: c:> start "Textfile.txt:cmd.exe"

この理由は、あなたが提供した理由だけでなく、Linux コマンド ライン (* または .*) を使用しているときに非常に苦労した正規表現/ワイルドカードの問題に似たものでもあると思います。ファイル名または構文でコロンを使用する何かがコマンド ラインに追加された可能性があります。そのため、ユーザーはシーケンスを引用符でエスケープして、ADS と追加されたコマンド機能を区別する必要があります。

于 2011-05-16T03:50:29.007 に答える