我想修改我没写过的.NET程序的行为。我使用ILSpy来查看相关的源代码,发现程序使用静态字段来加载我想要更改的数据,所以我编写了一个简单的程序来反映静态字段,更改该值,然后启动该程序。
问题是,程序在启动时似乎被忽略了!我环顾四周,发现static variables are only static within an AppDomain
。我怀疑这是我的问题。我的启动器应用正在修改“静态”变量,但调用Process.Start
会创建一个新的AppDomain
,这使我的更改无关紧要。
任何方式:
1)更改另一个 AppDomain
或
2)解决问题的方法不同?
答案 0 :(得分:1)
我认为你应该能够通过引导它来实现这一目标。
创建一个相同类型的新应用程序(Console,WinForms等),在新应用程序中添加现有应用程序.EXE作为参考,然后调用现有应用程序的入口点,它将运行就像以前一样。
然后,通过反射你应该能够绕过任何不方便的访问修饰符来修改值。
我刚刚创建了一个简短的测试应用程序,完成了这个,它工作得很好。我不知道你的应用程序,所以我不确定鳄鱼在杂草中是什么,但我认为引导会给你最好的机会。