function registerMainKeys(winreg) { var subkey; //the name of the subkey you are poking around in var err; winreg.createKey("SOFTWARE\\$CompanyName$",""); subkey = "SOFTWARE\\$CompanyName$\\$ProductName$"; winreg.createKey(subkey,""); err = winreg.setValueString(subkey, "CurrentVersion", "$UserAgent$"); winreg.createKey("SOFTWARE\\$CompanyName$\\$ProductName$\\$UserAgent$",""); subkey = "SOFTWARE\\$CompanyName$\\$ProductName$\\$UserAgent$\\Main"; winreg.createKey(subkey,""); err = winreg.setValueString(subkey, "Install Directory", fProgram); subkey = "SOFTWARE\\$CompanyName$\\$ProductName$\\$UserAgent$\\Uninstall"; winreg.createKey(subkey,""); err = winreg.setValueString(subkey, "Uninstall Log Folder", szUninstall); err = winreg.setValueString(subkey, "Description", "$ProductName$ ($UserAgentShort$)"); } function updateWinReg() { //Notes: // can't use a double backslash before subkey - Windows already puts it in. // subkeys have to exist before values can be put in. var winreg = getWinRegistry(); var subkey; //the name of the subkey you are poking around in var restrictedAccess; var ikwDefined; if(winreg != null) { /* This will check to see if the user has restricted access or not. * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable. If * it is, then access is not restricted. This is only used to * determine which Desktop, Programs, and Start Menu folders * are to used: common or per user */ restrictedAccess = false; ikwDefined = typeof(winreg.isKeyWritable); logComment("winreg.isKeyWritable(): " + ikwDefined); if(ikwDefined == "function") { winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE); if(!winreg.isKeyWritable("SOFTWARE")) restrictedAccess = true; } logComment("restrictedAccess value: " + restrictedAccess); if(!restrictedAccess) { winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE); registerMainKeys(winreg); } winreg.setRootKey(winreg.HKEY_CURRENT_USER); registerMainKeys(winreg); } } function upgradeCleanup() { deleteThisFile("Program", "component.reg"); deleteThisFile("Components", "compreg.dat"); deleteThisFile("Components", "xpti.dat"); deleteThisFile("Components", "xptitemp.dat"); } // main var srDest; var err; var szUninstall; var fProgram; var fWindowsSystem; var fileComponentReg; var fileComponentRegStr; var fileMsvcrt; var fileMsvcirt; srDest = $SpaceRequired$:bin; err = initInstall("Mozilla XPCOM", "XPCOM", "$Version$"); logComment("initInstall: " + err); fProgram = getFolder("Program"); fWindowsSystem = getFolder("Win System"); logComment("fProgram: " + fProgram); // build the uninstall folder path szUninstall = fProgram + "Uninstall"; // Log component.reg file so it can be deleted by the uninstaller. // These two files are created after installation is done, thus // are normally not logged for uninstall. logComment("Installing: " + fProgram + "component.reg"); if(verifyDiskSpace(fProgram, srDest)) { setPackageFolder(fProgram); upgradeCleanup(); err = addDirectory("", "$Version$", "bin", // dir name in jar to extract fProgram, // Where to put this file (Returned from GetFolder) "", // subdir name to create relative to fProgram true); // Force Flag logComment("addDirectory() of Program returned: " + err); if( err == SUCCESS ) { // install msvcrt.dll *only* if it does not exist // we don't care if addFile() fails (if the file does not exist in the archive) // bacause it will still install fileMsvcrt = getFolder(fWindowsSystem, "msvcrt.dll"); rv = File.exists(fileMsvcrt); logComment("fileExists() returned: " + rv); if(rv == false) { logComment("File not found: " + fileMsvcrt); addFile("/Microsoft/Shared/msvcrt.dll", "$Version$", "msvcrt.dll", // dir name in jar to extract fWindowsSystem, // Where to put this file (Returned from getFolder) "", // subdir name to create relative to fProgram WIN_SHARED_FILE); logComment("addFile() of msvcrt.dll returned: " + err); } else { logComment("File found: " + fileMsvcrt); } // install msvcirt.dll *only* if it does not exist // we don't care if addFile() fails (if the file does not exist in the archive) // bacause it will still install fileMsvcirt = getFolder(fWindowsSystem, "msvcirt.dll"); rv = File.exists(fileMsvcirt); logComment("fileExists() returned: " + rv); if(rv == false) { logComment("File not found: " + fileMsvcirt); addFile("/Microsoft/Shared/msvcirt.dll", "$Version$", "msvcirt.dll", // dir name in jar to extract fWindowsSystem, // Where to put this file (Returned from getFolder) "", // subdir name to create relative to fProgram WIN_SHARED_FILE); logComment("addFile() of msvcirt.dll returned: " + err); } else { logComment("File found: " + fileMsvcirt); } } // check return value if( err == SUCCESS ) { updateWinReg(); err = performInstall(); logComment("performInstall() returned: " + err); } else cancelInstall(err); } else cancelInstall(INSUFFICIENT_DISK_SPACE); // end main