2017-07-08 19 views
1

"Data.exe"というc実行ファイルで25 cd-romを焼きました。すべてのCDには同じCD名と同じ実行可能ファイル名がありましたが、実行可能ファイルのバージョンは異なりました。ここでは、コードです:異なるCDからの異なる実行ファイルは常に同じコードを実行します

CD0

system("C:\\_folder\\_folder.exe 0"); 

CD1

system("C:\\_folder\\_folder.exe 1"); 

.....というように.....

CD24

system("C:\\_folder\\_folder.exe 24"); 

"C:\ _ \フォルダ_folder.exe" のコードは、CDSが正しく燃やされた場合にだけチェックする

printf(argv[1]); 

ました。 (本のすべての背後にあるコアアイデアは、CDSが自分自身を識別し、CDSは、私のニーズのために再利用可能にするために、ホスティングPCに本当のロジックを移動できるようにした。)


問題は、私はランダムに挿入することですCDを挿入すると、以前に挿入されたCDの実行可能ファイルが "スタック"し、新しいものの代わりに自身を表示します。

たとえば、CD16を挿入すると16が印刷され、次にCD20が挿入され、CD20実行可能ファイルから16が印刷されます.CD20実行可能ファイルの最終編集日もCD16のままです。再起動後、すべてが "リセット"され、挿入された最初のCDが新しい "スタック"になります。同じ問題は他のすべてのCDにも当てはまります。

これは簡単な作業のようで、私は確かに何かが欠けています。私の誤りはどこですか?

+0

exeをCDから実行すると、ファイルは一時的にバッファに入れられ、同じファイルを再度呼び出すと、再バッファリングの代わりに一時ファイルが使用されます。次のCDを挿入する前に%temp%のすべてをクリアしてください –

+0

CDを挿入し、exeを実行し、%temp%の内容を削除し、別のcdを挿入し、exeを実行して再度同じIDを取得しました。 –

+1

@SurajS、いいえ、Windowsはそれをしません。実行可能ファイルが一時フォルダから実行したい場合は、それ自身で実行する必要があります。これはファイルシステムのキャッシュによく似ています。 CDのボリューム名が異なる可能性があります。 –

答えて

2

Windowsは、media changed test CDユニットにアクセスしてCDにアクセスして、最後の呼び出しからCDが変更されたかどうかを確認します。そうであれば、バッファされたキャッシュブロックをすべて破棄し、CDから新しいデータで再ロードします。メディアが変更された機能のメカニズムは、通常、ボリュームごとに新しいuuidを使用してフォーマットする際に格納されるvolume-idタグに置かれます。 windows idによって期待されるボリュームはISO-9660フォーマットでは存在しないため、通常、オペレーティングシステムは、メディアが変更されたかどうかを検出する別の方法に従います。ボリュームラベルを変更して、各CDディスク上で別のものを使用するようにしてください。そうすれば、Windowsはボリュームをチェックするためにこれを使用します(CDドアを開くだけでは不十分です。 )

この場合、cdユニットのボリュームラベルを読むだけで、毎回異なるステータスや情報を出力するプログラムの実行をシミュレートするのに十分です。

+0

私は、Windowsからのより堅牢なチェックを期待していましたが、とにかくボリュームラベルの作業を変更し、 –

関連する問題