New version for node-regedit

Written by Yaniv Kessler

After a very very long coding session, a new release for node-regedit (v2.0.0) is out.

Per the 80-20 rule, 80% of the work was fun and quick. The remaining 20% was a gory nightmare spanning several days and composed of issues in unicode characters conversion between processes, codepage difference between shell and console and other super boring stuff I won’t even go into because I’m trying to erase it all from my own memory.

Here is a summary of the changes.

New streaming interface

Read the whole fu<[<|ng registry if you want and run huge batches of writes.

Regedit works by spawning a vbscript process that does the actual work.

Up until now the command line arguments were the main pipeline for data between the node.js/nw.js process and the vbscript process.

A few weeks ago, at the last moment before a crucial release, very late on a weekend night at the office (!!!) we discovered on someone’s (who’s name I won’t mention…) very “dirty” windows registry that this pipeline has a limit, possibly due to the underlying process spawning mechanism but that requires further investigation.

So now, all the commands (including the .arch ones) use a streaming interface. Instead of passing data through the command line they spawn the process and then communicate using stdin/stdout.

The API interface for most of the commands remain the same, e.g:

regedit.createKey(['bla', 'bla']', callback) 

Except for the list() command:

regedit.list(['bla', 'bla'])
.on('data', function(entry) {
       console.log( // subkeys
       console.log( // values
.on('error', function(e) { ... })
.on('finish', function () { ... we're done })

Now you can get results from the registry as they arrive instead of buffering everything.

The older callback interface for list() remains for backwards compatibility but does not use the streaming interface and will be removed at some point from newer versions.

Default values

regedit now supports listing and changing a key’s default value

Fix issue # 3 about accessing and changing default values.

The sucky thing about default values is that they have no value name. This introduces some practical problems and code styling issues. The latter will be taken care of soon.

The solution implemented now is a temporary one but it is stable and working.

- FIN -