2009-09-07 49 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