2009-09-07 12 views
1

我有一箇舊的VW3/ENVY圖像,包裹被加載爲非託管代碼(正是Mastering ENVY/DEVELOPER警告的情況)。不幸的是,這個問題很久以前就發生了,如果沒有加載包裹,只是「返回」一個圖像就太遲了。如何擺脫VW 3.1d和ENVY的非託管代碼

顯然,有一種方法可以解決這個問題(我們有一個開發圖像解決了這個問題,並且有正常的配置圖包含與非託管包完全相同的代碼,但它們無法加載) ,但確切的方式早已被遺忘了(並且將特定的開發映像作爲新運行時映像的基礎存在一些問題,所以我需要了解如何再次執行此操作)。

理論上,應該可以刪除地塊並從配置地圖重新加載代碼。實際上,所有常規方式(使用ParcelBrowser或直接調用UnmanagedCode >> remove)都會失敗。我甚至嘗試從方法字典中手動刪除有問題的選擇器,但是過了某個時間點(涉及#primBecome的調用:)整個圖像完全掛起(我甚至無法進入調試器)。我開始黑客攻擊類和方法的實例,希望我會欺騙ENVY認爲這些特定的方法是普通的版本化代碼,但沒有任何成功。

有沒有任何一個小叮噹/嫉妒的大師,還記得足夠的大衆3給我提供任何指針?

狀態更新 試圖解決我終於成功了問題,至少部分,所以如果任何人的興趣過了一個星期......

首先,我不得不修覆文件指針的umnanaged代碼(否則,所有試圖觸及方法的東西都會拋出異常)。它看起來像ENVY擴展了Parcel,所以在理論上,所有整型文件指針在加載時都會更改爲ENVY的void filepointer,但在我的情況下,我必須手動執行它(Parcel爲它定義的所有選擇器提供枚舉)。另一種方法是調整filePointer代碼,但不能在需要的每個圖像上自動完成。

然後,包裹可以被丟棄,這會丟棄包裹信息,但保留代碼。官方的「放棄」機制需要有一個有效的更改文件(嫉妒不用,所以必須手動設置,之後重置)和包裹來源(我們很幸運)。

爲了能夠對方法進行任何更改(手動或通過從ENVY加載應用程序或類),他們需要擺脫其非託管狀態。這可以通過手動調整TheClass>>applicationAssocs(我也擺脫了UnmanagedCode sich中的所有類的引用作爲時間戳,並刪除了對丟棄包的引用)。實際上我有一些關於如何從我的老闆那裏得到的信息,但是直到我幾乎自己想出來之前,我一直無法理解這些說明。

這終於讓我加載並重新載入所有包含類的應用程序。理論上。實際上,每當我嘗試加載應用程序的更新版本(包含以前在包裹中的代碼)時,圖像仍然完全掛起。

原來的崩潰有絕對無關的代碼是不受管理,但與事實有關的包裹修飾InputState>>process:,它導致異常,原因是缺少和/或初始化類變量(在新的process:方法到位之後才調用InputState>>initialize方法)。我必須修改Notifier類才能將所有異常轉儲到文件以瞭解發生了什麼。將類變量添加到類的源代碼中(而不是通過反射來添加它),通過toBeLoadedCode掛起輸入處理線程並在loaded方法中再次啓動並創建新版本的應用程序即使解決了此問題。

現在一切正常,在理論上。在實際中,它仍然是不可用的,因爲重新加載WindowSystem或VisualworksBase應用程序會導致它們的初始化塊運行,並且大量設置被重置爲它們的默認設置 - 字體和字體大小,窗口顏色,UI設置...並且沒有似乎有任何方法可以將設置保存到文件並稍後加載,或者只是查看所有設置是什麼(官方設置菜單不顯示所有內容,或者我們有一個嚴重調整的圖像...非常重要從頭開始)。但這是一個完全不同的問題。

+0

+1哇,有一段時間沒有看到任何帶有小標籤的問題。 – karim79 2009-09-07 16:13:20

回答

1

那麼,通常的建議是,您應該能夠通過從存儲庫加載代碼從頭開始重新構建開發映像。但是,如果你有這個,那麼答案會很簡單,只需放棄該圖像並重新加載即可。我認爲這已經足夠長了,我已經失去了關於如何嘲弄內部結構以獲取它的任何知識,而且這聽起來像是你嘗試了很多東西。所以,雖然這可能會很痛苦,但通過加載存儲庫中的內容來找出重建開發圖像的方法聽起來像是最好的選擇。它可能並不是那麼可怕,只是可能存在一些對圖像狀態的依賴,或者需要執行的特殊doit。

您可能還需要驗證存儲庫中的內容與正在處理的映像中的內容有關。如果加載了非託管代碼,然後有人修改並保存了它,我不清楚它是否已保存到ENVY。因此,您可能希望審覈所有非託管代碼,並且如果它已更改,請將其保存到存儲庫版本。

對不起,我沒有更好的答案。

+0

哇,謝謝你的回答!我已經能夠取得一些進展,事實證明,實際的非託管代碼是我的問題中最少的。我會用我的發現來更新我的原始問題。 – 2009-09-12 07:11:13