我需要将应用程序从Windows 2003迁移到Windows 2012 R2。还有一个SNMP扩展代理DLL(32位),也需要迁移。
我已安装SNMP服务并尝试配置扩展代理。
首先,我尝试以与在Windows 2003上相同的方式执行此操作:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents
:
"1"="SOFTWARE\\MyCompany\\MyAgent\\CurrentVersion"
和
HKEY_LOCAL_MACHINE\SOFTWARE\MyCompany\MyAgent\CurrentVersion
:
"Pathname"="C:\bin\myagent"
。
但扩展代理没有启动,在系统事件日志中我找到了这个日志:
SNMP服务忽略扩展代理dll C:\ bin \ myagent 因为它丢失或配置错误。
文件"myagent.dll"
存在。所以我尝试将"dll"
扩展名添加到注册表项中,结果相同。
经过一些互联网研究后发现,32位应用程序的注册表项应位于Wow6432Node
sud-tree下。所以我将配置移到了注册表树:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyCompany\MyAgent\CurrentVersion
并将扩展代理上的配置更改为指向正确的注册表子树。在此之后,系统事件日志中没有错误日志,但任何进程都未加载DLL(由Process Explorer检查)。
有没有人有任何建议? (遗憾的是,重新编译为64位不是一种选择)。
答案 0 :(得分:0)
我的32位SNMP扩展代理DLL遇到了同样的问题,这个问题通过这种方式解决了:
public final class User {
private final String firstName, lastName;
private final int age;
private final String address;
private final List<User> friends;
private User(Builder builder) {
this.firstName = builder.lastName;
this.lastName = builder.lastName;
this.age = builder.age;
this.address = builder.address;
this.friends = Collections.unmodifiableList(new ArrayList<>(builder.friends)); //immutable list
}
public String getFirstName() {
return firstName;
}
public List<User> getFriends() {
return friends;
}
/**
* other getters;
*/
public static class Builder {
private String firstName, lastName;
private int age;
private String address;
private List<User> friends = new ArrayList<>();
public Builder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setAddress(String address) {
this.address = address;
return this;
}
public Builder addFriend(User friend) {
this.friends.add(friend);
return this;
}
public User build() {
return new User(Builder.this);
}
}
public static void main(String[] args) {
User johnSmith = new User.Builder("John", "Smith").setAge(33).setAddress("New York").build();
}
}
我认为您不必更改注册表子树的路径,因为[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\OTES\NL_CUTDA\CurrentVersion]
REG_EXPAND_SZ : "Pathname"="%ProgramFiles(x86)%\OTES\NL_CUTDA\NL_CUTDA.dll"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SNMP\Parameters\ExtensionAgents]
REG_SZ : "nl_cutdamib"="SOFTWARE\\OTES\\NL_CUTDA\\CurrentVersion"
键被重定向到物理路径HKEY_LOCAL_MACHINE\Software
Registry Redirector
我希望它有所帮助。此致,米兰。