HomePage RecentChanges

This wiki was last modified more than half a year ago and will be deleted eventually!

nsIRegistry

XulPlanet? documentation: nsIRegistry

Other documentation: libreg source, reg.h in particular

Okay!

[[appreg?]].

It works like this.

 var Cc = Components.classes;
 var Ci = Components.interfaces;
 var rc = Cc["@mozilla.org/registry;1"];
 var rs = rc.getService(Ci.nsIRegistry);

Now you have the registry service.

 rs.openWellKnownRegistry(2);  // 2 signifies the ApplicationRegistry, if I understand right
 var st = rs.enumerateAllSubtrees(2);  // 2 signifies "common", see libreg source (reg.h) for info

Now you have an nsIEnumerator that can report the subtrees.

 try {
   st.first();
   do {
     var data = st.currentItem();
     if( data instanceof Ci.nsIRegistryNode )
       print("nsIRegistryNode: " + data.nameUTF8 + " (" + data.key + ")");
     st.next();
   } while( Components.lastResult == 0 );
 } catch(e) {}

Now, the output is something like:

 Profiles (344)
 Profiles/default (530)
 Profiles/foo (1046)
 Profiles/bar (1518)

The number inside the parenthesis is the "key." You can use this key with the rest of the nsIRegistry API.

Now, I know from visual inspection that there's a key called "directory" for each profile. I don't know how to get the other keys' names automatically, but I do know how to look up the directory for a particular profile.

 js> rs.getStringUTF8(530, "directory")  // 530: key corresponding with Profiles/default

The output is something like:

 /home/lion/.mozilla/default/awp83kud.slt

Boo-yah!

Can we change it?

 js> rs.setStringUTF8(530, "directory", "/home/lion/somewhere/else")
 js> rs.getStringUTF8(530, "directory")
 /home/lion/somewhere/else

Yes!

Now, the only puzzle is: how do you save it?

 js> rs.flush()  // this is not enough...

Perhaps if we quit with the appShellService, it will work.