6

Delphi6教授。

多くのアプリケーションがあります。プログラムのサイズは8〜12MBです。

この期間に、「無効なストリーム形式」エラーに関するレポートを何度も受け取りました。

共有Windows(またはLinux)フォルダーを使用してアプリケーションを保存し、ユーザーはこれらのディレクトリからリンクを使用してアプリケーションを実行します。これは、OSがファイルをページングし、必要な部分のみをロードしていることを意味します。

以前は、C000006の例外が発生していました。私が知っているように、これはファイルのページング(ロード)がネットワークの問題(タイムアウトなど)で失敗したことを意味します。

ここで、「無効なストリーム形式」エラーと「無効なプロパティxxxx」エラーが発生します。

私がよく知っているなら、「ページングの問題」によって引き起こされたエラーですが、C06はコードで発生し、Exeのデータ領域でストリームエラーが発生します。しかし、多分私は間違っていることを知っています...

とにかく問題は奇妙です。時々私達はそれを手に入れました、時々私達はそうではありません。

それを回避する方法は?これらのエラーにより、ユーザーは新しいダイアログを作成したり、プログラムを使用したりできなくなります...

(他の場所では、ユーザーはWi-Fiを使用していましたが、同じ副作用が発生しました。)

多分あなたはこの問題を防ぐ方法を知っているでしょう。

UPX(vs.アンチウイルス)?exe-sをローカルの場所にコピーしますか?

この顧客のシステム管理者は、「すべてが大丈夫だ」と言ったため、「私たちの敵」です。問題の原因を特定できません...

すべてのアイデアをありがとう:dd

4

2 に答える 2

6

分析が正しく、実行可能ファイルが不安定な接続のネットワークドライブにあることが問題であると仮定すると、解決策があります。実行可能ファイルにPEフラグを追加して、実行前にWindowsがファイルをネットワークからローカルマシンにコピーするように強制する必要があります。

.dprファイルのuses句にWindowsユニットが含まれていることを確認してください。そして、次の行を追加します。

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}

begin.dprファイルの直前。Windows2つの定数が認識されるようにユニットを追加しました。

于 2012-12-07T16:30:26.257 に答える
0

別の可能性は、例えば、upxツールでexeをパックすることかもしれません。

http://upx.sourceforge.net/

実行前にメモリ内のファイル全体を展開します。

そしてそれは帯域幅を節約します。

于 2012-12-07T20:29:03.580 に答える