2010-12-07 89 views
0

有沒有頁面到內存中的另一個進程的整個圖像?幾周後,我們的IT人員將更換所有「核心」網絡交換機。這會降低網絡。這將在正常工作時間後完成。在此期間,有幾位用戶仍然會使用我編寫的程序。在每個用戶的機器上安裝我的程序的本地副本將是一場噩夢。該程序通常從網絡共享中運行。程序訪問網絡的唯一時間是程序執行其可執行(圖像)代碼的時間。我如何讓Windows內存管理器將整個映像加載到內存中並在那裏保持「鎖定」狀態,直到網絡重新聯機爲止?鎖定可共享內存

回答

1

這是行不通的。

Windows並不一定會將可執行文件的「靜態」副本加載到內存中,它可以隨意將大塊和頁面部分混合進入內存。通常它在程序開始運行後從可執行文件加載資源(圖像,字符串等)。它也經常動態加載外部庫。

編輯補充:

有沒有這樣的事情爲「一個進程的整個形象。」例如,每個線程都有自己的分配。

也許你應該解釋爲什麼從不同位置(即二進制文件的本地副本)運行不適合你。

+0

我意識到這一點。我想將圖像鎖定到內存中。有一個VirtualLock函數可以做到這一點。但它只是調用過程,我還需要弄清楚圖像每個部分的基地址和長度。 – Mike 2010-12-07 21:00:20

+0

如果程序不需要訪問服務器上啓動時的某些文件,則可以將程序複製到本地磁盤。對不起,我沒有提到。我希望編寫一個小程序來調用一些系統API來將EXE的代碼和數據段「鎖定」到內存中。 – Mike 2010-12-07 21:31:12

1

您可以編寫它以便將其本身複製到臨時目錄,然後讓它將該副本作爲單獨的進程運行,然後自行終止(第一個副本)。我之前完成了這個小小的雜耍行爲,但這取決於你的程序是如何工作的,不管它是否喜歡從臨時目錄運行。