2017-07-08 50 views
1

我用名爲「Data.exe」的c可執行文件刻錄了25張cd-rom。所有的CD都有相同的CD名稱和相同的可執行文件名稱,但具有不同的可執行文件版本下面的代碼:來自不同cds的不同可執行文件總是運行相同的代碼

CD0

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

CD1

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

.....等等.....

CD24

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

的 「C:\ _文件夾\ _folder.exe」 代碼爲

printf(argv[1]); 

只是爲了檢查CDS被正確燒燬。 (後面這一切的核心思想是讓CDS識別自己和移動的真正邏輯的託管PC,使CDS可重複使用我的需求。)


的問題是,當我隨意插入CD插入電腦,往往是先前插入的CD的可執行文件「卡住」,並顯示自己,而不是新的。

例如,如果我插入CD16我打印16,然後我插入CD20,我仍然從CD20可執行文件打印16,CD20可執行文件的最後編輯日期仍然是從CD16。重新啓動後,一切都會「重置」,插入的第一張光盤將成爲新的「卡住」光盤。同樣的問題適用於所有其他的CD。

這似乎是一個微不足道的任務,我肯定錯過了一些東西。我的錯誤在哪裏?

+0

由於您從CD運行exe文件,文件被緩存在臨時文件中,並且當您再次調用同一文件而不是重新緩存時,它只使用臨時文件。在插入下一張cd之前清除%temp%中的所有內容 –

+0

剛剛嘗試過,但沒有奏效:插入了cd,運行exe,刪除了%temp%內容,插入了不同的cd,運行了exe並重新獲得了相同的id。 –

+1

@SurajS,不,Windows不這樣做。如果可執行文件想從臨時文件夾運行,則必須自行完成。這看起來更像是文件系統緩存。 CD可能需要有不同的卷名。 –

回答

2

Windows做了媒體在訪問它之前在CD單元上更改了測試,以檢查CD是否已從上次調用改變。如果是這樣,它會丟棄所有緩存的緩存塊,並用CD中的新數據重新加載它。媒體更改功能的機制通常放置在使用每個卷的新uuid格式化存儲的卷標識標記上。 Windows ID所期望的音量在ISO-9660格式中不存在,因此通常操作系統會採用另一種方式來檢測媒體是否已更改。嘗試更改卷標,以便在每張CD光盤上使用不同的卷標,所以Windows可能會使用此選項來檢查音量是否已更改(只需打開cd門是不夠的,因爲並非所有cd單元都有開門硬件檢查)

如果是這種情況,那麼只需讀cd單元的卷標就足以模擬運行每次輸出不同狀態或信息的程序。

+0

我期望從Windows獲得更強大的檢查,無論如何改變卷標工作,並導致您建議的不同媒體 –

相關問題