home *** CD-ROM | disk | FTP | other *** search
/ Chip 2009 November / Chip_2009.11_CD.iso / Chip_WPI / WPIScripts / installer.js < prev    next >
Encoding:
JavaScript  |  2007-11-14  |  14.2 KB  |  519 lines

  1. /*
  2.  
  3. Set Auto Logon
  4. And set a RunOnce for when desktop loaded clear auto logon for sure
  5.  
  6. */
  7.  
  8. //
  9. // Date Last Modified: Saturday, October 28, 2006
  10. //
  11. // Modified By: Mark Ritter, DjΘ, Michael Mims (zorphnog)
  12. //
  13.  
  14.  
  15. function checkInstall(arg) 
  16. {    
  17.     position="installer.js";
  18.     whatfunc="checkInstall()";
  19.  
  20. // 'install' and 'timer' also available
  21.     if (arg !='exit' || ReallyForce) 
  22.     {
  23.         if (arg=='exit')
  24.         {
  25.             alert(getText(msgStartInstall));   
  26.             remChecks();
  27.         }
  28.     
  29.         InstallPrograms();
  30.     }
  31.     else
  32.         ExitWPI();
  33.  
  34.     if (arg=='exit' && ReallyForce)
  35.         ExitWPI();
  36.  
  37.     if (ReOpenAfterInstall)
  38.     {
  39.         strFile=wpipath+"\\WPI.hta";
  40.         document.location="file:///"+strFile.replace(/\\/g, '/');
  41.  
  42.         return;
  43.     }
  44.     else
  45.         ExitWPI();
  46. }
  47.  
  48.  
  49. function ShowInstaller()
  50. {
  51.     position="installer.js";
  52.     whatfunc="ShowInstaller()";
  53.  
  54.     var iWidth, iHeight;
  55.     iWidth=328+ExtraWidth;
  56.     iHeight=451+ExtraHeight;    // 451 with Abort gadget
  57.     if (PlayAudioInInstaller)
  58.         iHeight +=62;
  59.  
  60.     strFile=wpipath+"\\Common\\Installer.hta";
  61.     if (!FileExists(strFile))
  62.     {
  63.         alert(getText(errCouldNotOpenFile)+" '"+strFile+"'.");
  64.         ExitWPI();
  65.     }
  66.  
  67.     //Those lines are better placed here than in the InstallPrograms() function
  68.     if (!ResumeInstall)
  69.     {
  70.         htm();    // Turn off tips
  71.         topLine=0;
  72.     }
  73.     else
  74.         topLine=LastTopLine;
  75.     currentLine=0;
  76.     totalLine = programs.length;
  77.     centerLine = Math.round(maxLines/2);
  78.     maxLines = Math.min(maxLines, totalLine);
  79.  
  80.     window.resizeTo(0,0);
  81.     ResumeInstall==false ? document.location="file:///"+strFile.replace(/\\/g, '/') : null;        //change its content
  82.     window.moveTo(25,25);                                                        //move it
  83.     window.resizeTo(iWidth,iHeight);                                            //resize it
  84.  
  85.     while (window.document.readyState != 'complete' && !ResumeInstall)
  86.         Pause(0,100);                                                            //wait for the new document to be fully loaded
  87.     document.getElementById("InstallHeaderText").innerHTML=getText(InstallerHeaderTxt);
  88.     document.getElementById("Abort").value = getText(btnAbort);
  89.     document.getElementById("Aborted").value = getText(btnAborted);    
  90.     document.getElementById("AbortMessage").value = getText(txtAbortMessage);
  91.     document.getElementById("Pause").value = getText(btnPause);
  92.     document.getElementById("Paused").value = getText(btnResume);
  93.     document.getElementById("installLayer").style.cursor='wait';
  94.  
  95.     try
  96.     {
  97.         WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\ResumeInstall",1,"REG_DWORD");         // Set install state to in progress
  98.         WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\CurrentInstall",0,"REG_DWORD");        // Save current position for reboots
  99.         WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\LastTopLine",topLine,"REG_DWORD");
  100. //        WshShell.regWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\WPIresume",'mshta "'+wpipath+'\\Common\\Installer.hta"');
  101.         WshShell.regWrite("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\001\\","","REG_SZ");
  102.         WshShell.regWrite("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\001\\1",'mshta "'+wpipath+'\\Common\\Installer.hta"',"REG_SZ");
  103.     }
  104.     catch (ex) {;}
  105.  
  106.     if (PlayAudioInInstaller)
  107.         document.getElementById("MediaPlayerDIV").style.display='block';
  108. }
  109.  
  110.  
  111. function InstallPrograms() 
  112. {    
  113.     position="installer.js";
  114.     whatfunc="InstallPrograms()";
  115.  
  116.     var i, j, tempCmd;
  117.  
  118.     // Make sure we use the real %CDROM% path
  119.     hdd="";
  120.  
  121.     if (!ResumeInstall)
  122.     {
  123.         
  124.         for (i=1; prog[i] != null; i++)
  125.         {        
  126.             if (document.getElementById("chkbox"+i) && document.getElementById("chkbox"+i).checked)
  127.             {
  128.                 programs[programs.length++] = new program(i);                    
  129.                 programs[programs.length-1].texti = i;                            // For InsertCatNames()
  130.                 ScanForEntries(new program(i));
  131.             }            
  132.         }
  133.         RebootEntryFound ? WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\numCommands",numCommands,"REG_DWORD") : null;        // Save maxCommands for reboots
  134.  
  135.         if (programs.length==0)                                                    
  136.             return;
  137.  
  138.         if (!InstallByCategory) 
  139.             programs.sort(SortByOrdr);
  140. //        else
  141. //            programs=InsertCatNames();
  142.     }
  143.     if (programs.length==0)                                                    
  144.         return;
  145.  
  146.     OpenLogFile();
  147.     OpenRebootFile();
  148.  
  149.     if (!ResumeInstall)
  150.     {
  151.         if (ExecuteBeforeEnabled && ExecuteBefore != null)
  152.         {
  153.             programs.splice(0,0,new program(999998));
  154.             programs[0].prog="Execute Before";
  155.             programs[0].uid="EXECUTE_BEFORE";
  156.             programs[0].ordr=0;
  157.             programs[0].cat="WPI Built In";
  158.             programs[0].cmd1=ExecuteBefore;
  159.             totalLine++;
  160.         }
  161.  
  162.         if (ExecuteAfterEnabled && ExecuteAfter != null)
  163.         {
  164.             programs.splice(programs.length,0,new program(999999));
  165.             programs[programs.length-1].prog="Execute After";
  166.             programs[programs.length-1].uid="EXECUTE_AFTER";
  167.             programs[programs.length-1].ordr=0;
  168.             programs[programs.length-1].cat="WPI Built In";
  169.             programs[programs.length-1].cmd1=ExecuteAfter;
  170.             totalLine++;
  171.         }
  172.     
  173.         WriteLogLinePlain("\r\n"+getText(ListofProgsToInstall));
  174.         for (i=0; programs[i] != null; i++)
  175.         {
  176.             if (programs[i].desc != "WPI Built In Category")
  177.             {
  178.                 WriteLogLinePlain("   "+programs[i].prog);
  179.                 RebootEntry(programs[i]);
  180.             }
  181.         }
  182.     }
  183.  
  184.     ShowInstaller();
  185.     ResumeInstall ? i=CurrentInstall : i=0;
  186.  
  187.     for (i; i<programs.length && programs[i] != null; i++)
  188.     {    
  189.         if (!ResumeInstall)
  190.         {
  191.             programs[i].success=false;
  192.             programs[i].fail=false;
  193.         }
  194.         if (programs[i].desc=="WPI Built In Category")
  195.             continue;
  196.  
  197.         UpdateInstallList(i,programs);
  198.  
  199.         if (!ResumeInstall)
  200.             StartLogEntry(programs[i]);
  201.         
  202.         WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\CurrentInstall",i,"REG_DWORD");        //Save current position for reboots
  203.  
  204.         if (!ResumeInstall)
  205.         {
  206.             WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\LastExec",0,"REG_DWORD");        //Save current position for reboots
  207.             tempCmd = eval('programs['+i+'].regb');
  208.             if (programs[i].regb!=null && ReplacePath(tempCmd[0])!='')
  209.             {
  210.                 WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\curCommand",curCommand+1,"REG_DWORD");    //Save current command position for reboots
  211.                 InstallOne(i,'regb');
  212.                 UpdateProgressBar(Math.round(((++curCommand)/numCommands)*100));
  213.                 Pause(0,250);
  214.             }
  215.         }
  216.  
  217.         ResumeInstall ?    j=LastExec+1 : j=1;
  218.         for (j; j<=10; j++)
  219.         {
  220.             WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\LastExec",j,"REG_DWORD");        //Save current position for reboots
  221.             tempCmd = eval('programs['+i+'].cmd'+j);
  222.             if (tempCmd!=null && ReplacePath(tempCmd[0])!='')
  223.             {
  224.                 WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\curCommand",curCommand+1,"REG_DWORD");    //Save current command position for reboots
  225.                 InstallOne(i,'cmd'+j);
  226.                 UpdateProgressBar(Math.round(((++curCommand)/numCommands)*100));
  227.                 Pause(0,250);
  228.             }
  229.         }
  230.  
  231.         if (!ResumeInstall || (ResumeInstall && LastExec<11))
  232.         {
  233.             WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\LastExec",11,"REG_DWORD");        //Save current position for reboots
  234.             tempCmd = eval('programs['+i+'].rega')
  235.             if (programs[i].rega!=null && ReplacePath(tempCmd[0])!='')
  236.             {
  237.                 WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\curCommand",curCommand+1,"REG_DWORD");    //Save current command position for reboots
  238.                 InstallOne(i,'rega');
  239.                 UpdateProgressBar(Math.round(((++curCommand)/numCommands)*100));
  240.                 Pause(0,250);
  241.             }
  242.         }
  243.  
  244.         if (ResumeInstall)
  245.         {
  246.             LastExec != 12 ? WriteLogLine(getText(FinishedInstallation)) : null;
  247.             ResumeInstall=false;
  248.             RebootEntryFound=true;
  249.             continue;
  250.         }
  251.         else
  252.         {
  253.             WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\LastExec",12,"REG_DWORD");
  254.             WriteLogLine(getText(FinishedInstallation));
  255.         }
  256.  
  257.         while (document.getElementById("Pause").value == getText(btnResume))
  258.         {
  259.             Pause(0,250);                                        //Pause the installation on user request
  260.             if (!document.getElementById("Aborted").value)                        //Check for user abortion
  261.                 break;
  262.         }
  263.         if (!document.getElementById("Aborted").value)                            //Check for user abortion
  264.             break;
  265.     }
  266.     if (!document.getElementById("Aborted").value)
  267.         WriteLogLine("\r\n\r\n"+getText(InstallAbortedByUser));
  268.  
  269.     UpdateInstallList(10000000,programs);
  270.     Pause(0,250);
  271.  
  272.     CloseLogFile();
  273.     CloseRebootFile();
  274.     LogInstallation=false;
  275.     RebootInstallationLog=false;
  276.     DeleteRebootFile();
  277.  
  278.     try
  279.     {
  280.         WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\ResumeInstall",0,"REG_DWORD");
  281.         WshShell.regDelete("HKEY_CURRENT_USER\\Software\\WPI\\LastExec");
  282.         WshShell.regDelete("HKEY_CURRENT_USER\\Software\\WPI\\CurrentInstall");
  283.         WshShell.regDelete("HKEY_CURRENT_USER\\Software\\WPI\\LastTopLine");
  284.         WshShell.regDelete("HKEY_CURRENT_USER\\Software\\WPI\\curCommand");
  285.         WshShell.regDelete("HKEY_CURRENT_USER\\Software\\WPI\\numCommands");
  286.         WshShell.regDelete("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\001\\1");
  287.         WshShell.regDelete("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx\\001\\");
  288.     }
  289.     catch (ex) {;}
  290.  
  291.     if (RestartComputer)
  292.     {
  293.         if (DoNotLoadDesktop)
  294.             RestartSeconds=0;
  295.  
  296.         if (!RestartType)
  297.             cmdLine='shutdown.exe -r -f -t '+RestartSeconds+' -c "'+getText(ComputerWillRestart)+'"';
  298.         else
  299.             cmdLine='shutdown.exe -s -f -t '+RestartSeconds+' -c "'+getText(ComputerWillShutdown)+'"';
  300.         WshShell.Run(cmdLine,0,true);
  301.     }
  302.     
  303.     Pause(2,0);
  304. }
  305.  
  306.  
  307. function InstallOne(item,cmdName)
  308. {
  309.     position="installer.js";
  310.     whatfunc="InstallOne()";
  311.  
  312.     var cmd, cmdLine, ReturnCode, result;
  313.     var IsReboot=false;
  314.     
  315.     cmd=eval('programs['+item+'].'+cmdName);
  316.     if (cmd==null || (cmdLine=ReplacePath(cmd[0]))=='')
  317.         return;
  318.  
  319.     if (cmd[0].toUpperCase().indexOf("%REBOOT%")==0 || (ResumeInstall && cmd[0].toUpperCase().indexOf("SHUTDOWN.EXE")==0))
  320.         IsReboot=true;
  321.  
  322.     if (cmdName=='regb' || cmdName=='rega')
  323.     {
  324.         if (!FileExists(cmdLine))
  325.         {
  326.             programs[item].fail=true;
  327.             WriteRebootFail(item,true);
  328.             cmdName=(cmdName=='regb') ? 'Reg Before' : 'Reg After';
  329.             WriteLogLine(cmdName+' '+getText(FailFileDoesNotExist)+': RegEdit /S '+cmdLine);
  330.  
  331.             return;
  332.         }
  333.         if (cmdLine.indexOf(" ") != -1 && cmdLine.substr(0,1) != '"')
  334.             cmdLine='"'+cmdLine+'"';
  335.         cmdLine="RegEdit /S "+cmdLine;
  336.     }
  337.     else
  338.         cmdLine=handleCommand(cmdLine);
  339.  
  340.     try
  341.     {
  342.         ReturnCode=WshShell.Run(cmdLine,1,true);
  343.         result=getText(InstallSuccess);
  344.         programs[item].success=true;
  345.         WriteRebootSuccess(item,true);
  346.     }
  347.     catch(ex)
  348.     {
  349.         result=getText(InstallFail);
  350.         programs[item].fail=true;
  351.         WriteRebootFail(item,true);
  352.     }
  353.     cmdName=(cmdName=='regb') ? 'Reg Before' : (cmdName=='rega') ? 'Reg After' : cmdName;
  354.     WriteLogLine(cmdName+' '+result+' ('+getText(ReturnedCode)+' '+ReturnCode+'): "'+cmdLine+'"');
  355.  
  356.     if (IsReboot)                                        // Give some time for %reboot% to take affect
  357.         Pause(3600,0);
  358. }
  359.  
  360.  
  361. function handleCommand(cmd)
  362. {
  363.     position="installer.js";
  364.     whatfunc="handleCommand()";
  365.  
  366.     var firstToken;
  367.     
  368.     if (cmd.indexOf(" ") != -1 && cmd.substr(0,1) != '"')
  369.     {
  370.         firstToken = cmd.substr(0,cmd.indexOf(" "));
  371.         switch(firstToken.toUpperCase()) 
  372.         {
  373.             case 'FILECOPY': 
  374.                 cmd = ("CMD /C " + cmd.replace(/FILECOPY/gi,'copy')); 
  375.                 break;
  376.     
  377.             case 'FILEMOVE':
  378.                 cmd = ("CMD /C " + cmd.replace(/FILEMOVE/gi,'move')); 
  379.                 break;
  380.  
  381.             case 'RENAME': 
  382.                 cmd = ("CMD /C " + cmd.replace(/RENAME/gi,'ren')); 
  383.                 break;
  384.     
  385.             case 'DELETE': 
  386.                 cmd = ("CMD /C " + cmd.replace(/DELETE/gi,'del')); 
  387.                 break;
  388.  
  389.             case 'MAKEDIR': 
  390.                 cmd = ("CMD /C " + cmd.replace(/MAKEDIR/gi,'md')); 
  391.                 break;
  392.     
  393.             case 'DIRCOPY': 
  394.                 cmd = ("CMD /C " + cmd.replace(/DIRCOPY/gi,'xcopy') + " /I /E /Y"); 
  395.                 break;
  396.     
  397.             case 'DELDIR': 
  398.                 cmd = ("CMD /C " + cmd.replace(/DELDIR/gi,'rd') + " /S /Q"); 
  399.                break;
  400.  
  401.             default:
  402.                 if (FileExists(cmd))
  403.                     cmd='"'+cmd+'"';
  404.                 break;
  405.         }
  406.     }
  407.  
  408.     return (cmd);
  409. }
  410.  
  411.  
  412. function UpdateInstallList(pos,progs)
  413. {
  414.     position="installer.js";
  415.     whatfunc="UpdateInstallList()";
  416.  
  417.     var line, box="";
  418.     
  419.     if (pos>centerLine && topLine+maxLines<totalLine)                            //More lines than can be displayed 
  420.     {
  421.         topLine++;
  422.         WshShell.regWrite("HKEY_CURRENT_USER\\Software\\WPI\\LastTopLine",topLine,"REG_DWORD");
  423.     }
  424.  
  425.     for (line=topLine; line<topLine+maxLines; line++)
  426.     {
  427.         if (line<pos)
  428.         {
  429.             if (progs[line].desc != "WPI Built In Category")
  430.             {
  431.                 box+='<img src="../Themes/'+Theme+'/Install';
  432.                 box+=(progs[line].success ? (progs[line].fail ? 'Partial' : 'Success') : 'Fail');
  433.                 box+='.gif" border="0" width="11" height="11">';
  434.                 box+='<img src="../Themes/'+Theme+'/spacer.gif" border="0" width="2" height="1">';
  435.             }
  436.         }
  437.         else
  438.         {
  439.             if (progs[line].desc != "WPI Built In Category")
  440.                 box+='<img src="../Themes/'+Theme+'/spacer.gif" border="0" width="13" height="1">';
  441.         }
  442.  
  443.         box+='<font style="font-size:12px;">'+(line==pos ? '<b>'+progs[line].prog+'</b>' : progs[line].prog)+'</font><br>';
  444.     }
  445.  
  446.     document.getElementById("Install_prog").innerHTML=box;
  447. }
  448.  
  449.  
  450. function ClearProgressBar()
  451. {
  452.     position="installer.js";
  453.     whatfunc="ClearProgressBar()";
  454.  
  455.     document.getElementById("PB_text").innerHTML="";
  456.     document.getElementById("PB_bar").style.width=0;  
  457. }
  458.  
  459.  
  460. function UpdateProgressBar(value)
  461. {
  462.     position="installer.js";
  463.     whatfunc="UpdateProgressBar()";
  464.  
  465.     if (value>=0 && value<=100)
  466.     {
  467.         if (value>9)
  468.             document.getElementById("PB_text").innerHTML=parseInt(value)+"%";
  469.         document.getElementById("PB_bar").style.width=(value*3)+"px";
  470.     }
  471. }
  472.  
  473.  
  474. function InsertCatNames()
  475. {
  476.     position="installer.js";
  477.     whatfunc="InsertCatNames()";
  478.  
  479.     var programs2 = new Array();
  480.     var curCat="";
  481.      var i, j, k, progspercat;
  482.  
  483.     for (i=0; programs[i] != null; i++)
  484.     {
  485.         if (programs[i].cat != curCat[0])
  486.         {
  487.             // get a category's apps into temporary array and sort it
  488.             curCat=programs[i].cat;
  489.             progspercat = new Array();
  490.             for (j=i; programs[j] != null; j++)
  491.             {
  492.                 if (programs[j].cat == curCat[0])
  493.                     progspercat[progspercat.length++] = new program(programs[j].texti);
  494.                 else
  495.                 {
  496.                     progspercat.sort(SortByOrdr);
  497.                     // insert cat header
  498.                     progspercat.splice(0,0,new program(0));
  499.                     progspercat[0].prog="<b><i>"+curCat+"</i></b>";
  500.                     progspercat[0].uid="CATEGORY_"+curCat;
  501.                     progspercat[0].ordr=0;
  502.                     progspercat[0].desc="WPI Built In Category";
  503.                     progspercat[0].cat=curCat;
  504.                     totalLine++;
  505.  
  506.                     // append array to programs array
  507.                     for (k=0; k<progspercat.length; k++) 
  508.                           programs2[programs2.length++]=progspercat[k];
  509.                     break;
  510.                 }
  511.             }
  512.         }
  513.     }
  514.  
  515.     programs=[];
  516.  
  517.     return programs2;
  518. }
  519.