首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS -使用WINREG模块递归检索环境变量值

NodeJS -使用WINREG模块递归检索环境变量值
EN

Stack Overflow用户
提问于 2016-06-01 12:36:14
回答 1查看 628关注 0票数 0

我正在搜索以下的NodeJS实现:

代码语言:javascript
复制
reg query "HKEY_CURRENT_USER\Volatile Environment" /s /v CLIENTNAME

哪个递归地在\环境注册表中搜索CLIENTNAME变量。

现在的解决方案是:

代码语言:javascript
复制
var Registry = require( 'winreg' ),
    regKey = new Registry( {
        hive: Registry.HKCU,
        key: "\\Volatile Environment\\3\\" // for my use-case, the \\3\\ varies and I need something Dynamic
    } );

regKey.get( Registry.DEFAULT_VALUE, function( err, item ) {

    if ( err ) {
        console.log( "Error get: " );
        console.log( err );
    }
    else {
        console.log( "Success get: " );
        console.dir( item.value );
    }

} );

有什么优雅的方法可以使关键路径变得动态吗?

EN

回答 1

Stack Overflow用户

发布于 2016-06-01 13:46:06

作为一种临时解决方案,我编写了这个事件释放递归函数(我没有将其标记为一个可接受的答案,因为我肯定期望在WINREG库中更改参数值)。

,因为我只是在学习NodeJS,所以我用它做了一个有趣的组件:

代码语言:javascript
复制
var EventEmitter = require( 'events' ).EventEmitter;

function RegistryDataEvents( env_var_name ) {
    this.events = undefined;
    this.initEvents( env_var_name );
} // cunstruct RegistryDataEvents

RegistryDataEvents.prototype.initEvents = function( env_var_name ) {
    this.events = new EventEmitter();
    var _that = this;
    process.nextTick(
        function() {
            _that.retrieveClientName( 0, false, "", env_var_name );
        }
    );
}; // initEvents

module.exports.RegistryDataEvents = RegistryDataEvents;

RegistryDataEvents.prototype.rerun = function( env_var_name ) {

    this.retrieveClientName( 0, false, "", env_var_name );

}; // rerun

RegistryDataEvents.prototype.retrieveClientName = function( count, 
                                                            found, 
                                                            result, 
                                                            env_var_name ) {
    var _that = this;
    if ( count === 0 ) {
        _that.events.emit( 'start', result );
    }
    if ( found ) {
        _that.events.emit( 'success', result );
        return;
    }
    var key = "\\Volatile Environment\\"+ count +"\\";
    var Registry = require( './registry.js' ),
        regKey = new Registry( {
            hive: Registry.HKCU,
            key: key
        } );

    regKey.get( env_var_name, function( err, item ) {
        if ( err ) {
            // obviously this is a downfall of the module, any suggestions will be appreciated :)
            if ( count > 100 ) {
                _that.events.emit( 'failure', result, err, count );
                return;
            }
            _that.retrieveClientName( ++count, false, "", env_var_name );
        }
        else {
            found = true;
            _that.retrieveClientName( ++count, true, item.value, env_var_name );
            return;
        }
    } );
    return;
}; // retrieveClientName

使用

代码语言:javascript
复制
var RegistryDataEvents = require( './reg_data_evts.js' ).RegistryDataEvents;

// Register the event + listeners
var reg_data_evts = new RegistryDataEvents( "CLIENTNAME" );

// handle listener logic
reg_data_evts.events.on( 'start', function( result ) {
    console.log( "Started " + result );
} );

reg_data_evts.events.on( 'success', function( result ) {
    console.log( "Success: " + result );
} );

reg_data_evts.events.on( 'failure', function( result, err, count ) {
    console.log( "Failure: " + result + " - " + err + " after " + count + " attempts" );
} );

// just to show u can rerun the retrieveClientName method
reg_data_evts.rerun( "CLIENTNAME" );
// just to show u can rerun the retrieveClientName method
reg_data_evts.rerun( "CLIENTNAME" );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37568817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档