我不知道这是否可能出于安全原因,但可能是这样。
我在其中一个应用程序中发现了一个问题,修复它的方法是在进程内模块上调用公共方法。
因此,我的应用程序(我无法修改)使用一个名为'SSOSettingsFileReader.dll'的引用dll,在SSOSettingsFileReader.dll中是一个名为'ClearCache'的公共方法。我想编写一个循环遍历所有进程的控制台应用程序,在每个进程中搜索名为SSOSettingsFileReader的模块,并在每个进程上调用“ClearCache”。
这可能吗?
到目前为止,我可以获得该模块:
Process[] processes = Process.GetProcesses();
foreach (Process p in processes) {
if (p.ProcessName == "BTSNTSvc") {
ProcessModuleCollection modules = p.Modules;
foreach (ProcessModule m in modules) {
if (m.ModuleName == "SSOSettingsFileReader.dll") {
// What to do here?
// SSOSettingsFileReader sso = SomeWayToConvertModule(m)ToSSOSettingsFileReader();
// sso.ClearCache();
}
}
}
}
由于
P.S。我正在使用VS2005和.Net2.0但不限于此
答案 0 :(得分:0)
将代码注入进程并不是修复错误的最可靠方法。如果你确定没有其他选择,那就有可能。
CreateRemoteThread是您需要的核心,也就是您在远程进程中执行代码的方式。该函数需要一个线程入口点,因此您可能需要围绕ClearCache
函数编译一个包装器并将其添加到目标进程中。 MSDN文档涵盖了安全要求。通常,用户将此调用注入到他们拥有的进程中应该没有问题。