Windows 2012 R2 32位SNMP扩展代理

时间:2015-11-03 13:10:12

标签: dll snmp windows2012

我需要将应用程序从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位不是一种选择)。

1 个答案:

答案 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

我希望它有所帮助。此致,米兰。