DeleteIt
Цитата:
скрипт инсталляции зацикливается
|
Промучался с этой проблемой несколько дней, пока не залез на MSFN, благо английский еще не совсем забыл, там и нашел решение, спасибо товарищу
sadicq ...
Открываем
program.js и меняем функцию
ProgsInCat() на следующее:
Код:
function ProgsInCat(whichCat)
{
position="program.js";
whatfunc="ProgsInCat()";
var i, res;
res = 0;
for(i=1; prog[i]; i++)
{
if (cond[i] && cond[i][0])
if (cat[i] && cat[i]==whichCat && eval(unescape(ReplacePath(cond[i][0]).replace(/\\/g, "\\\\"))))
res++;
else;
else
if (cat[i] && cat[i]==whichCat)
res++;
}
return res;
}
Далее в
installer.js меняем функцию
Код:
function InstallOne(item,cmdName)
{
position="installer.js";
whatfunc="InstallOne()";
var cmd, ReturnCode, result;
CheckInstaller();
cmd=eval('programs['+item+'].'+cmdName);
if (cmd==null || (cmdLine=ReplacePath(cmd[0]))=='')
return;
if (cmdName=='regb' || cmdName=='rega')
{
if (!FileExists(cmdLine))
{
programs[i].fail=true;
cmdName=(cmdName=='regb') ? 'Reg Before' : (cmdName=='rega') ? 'Reg After' : cmdName;
WriteLogLine(cmdName+' *** Fail *** (File does not exist): RegEdit /S "'+cmdLine+'"');
return;
}
if (cmdLine.indexOf(" ") != -1 && cmdLine.substr(0,1) != '"')
cmdLine='"'+cmdLine+'"';
cmdLine="RegEdit /S "+cmdLine;
}
else
cmdLine=handleCommand(cmdLine);
try
{
ReturnCode=WshShell.Run(cmdLine,1,true);
result='Success';
programs[i].success=true;
}
catch(ex)
{
result='*** Fail ***';
programs[i].fail=true;
}
cmdName=(cmdName=='regb') ? 'Reg Before' : (cmdName=='rega') ? 'Reg After' : cmdName;
WriteLogLine(cmdName+' '+result+' (returned code '+ReturnCode+'): "'+cmdLine+'"');
}
на
Код:
function InstallOne(item,cmdName)
{
position="installer.js";
whatfunc="InstallOne()";
var cmd, ReturnCode, result;
CheckInstaller();
cmd=eval('programs['+item+'].'+cmdName);
if (cmd==null || (cmdLine=ReplacePath(cmd[0]))=='')
return;
if (cmdName=='regb' || cmdName=='rega')
{
if (!FileExists(cmdLine))
{
programs[item].fail=true;
cmdName=(cmdName=='regb') ? 'Reg Before' : (cmdName=='rega') ? 'Reg After' : cmdName;
WriteLogLine(cmdName+' *** Fail *** (File does not exist): RegEdit /S "'+cmdLine+'"');
return;
}
if (cmdLine.indexOf(" ") != -1 && cmdLine.substr(0,1) != '"')
cmdLine='"'+cmdLine+'"';
cmdLine="RegEdit /S "+cmdLine;
}
else
cmdLine=handleCommand(cmdLine);
try
{
ReturnCode=WshShell.Run(cmdLine,1,true);
result='Success';
programs[item].success=true;
}
catch(ex)
{
result='*** Fail ***';
programs[item].fail=true;
}
cmdName=(cmdName=='regb') ? 'Reg Before' : (cmdName=='rega') ? 'Reg After' : cmdName;
WriteLogLine(cmdName+' '+result+' (returned code '+ReturnCode+'): "'+cmdLine+'"');
}
и там же меняем
Код:
for(i=0; i<programs.length && programs[i] != null && !BreakLoop; i++)
{
ce++;
programs[i].success=false;
programs[i].fail=false;
UpdateInstallList(ce,programs);
StartLogEntry(programs[i]);
InstallOne(i,'regb');
CheckInstaller();
for(j=1; j<=6 && !BreakLoop; j++)
{
InstallOne(i,'cmd'+j);
CheckInstaller();
}
CheckInstaller();
InstallOne(i,'rega');
CheckInstaller();
WriteLogLine("Finished installation");
UpdateProgressBar(Math.round((ce/programs.length)*100));
Pause(0,250);
}
на
Код:
for(k=0; k<programs.length && programs[k] != null && !BreakLoop; k++)
{
ce++;
programs[k].success=false;
programs[k].fail=false;
UpdateInstallList(ce,programs);
StartLogEntry(programs[k]);
InstallOne(k,'regb');
CheckInstaller();
for(j=1; j<=6 && !BreakLoop; j++)
{
InstallOne(k,'cmd'+j);
CheckInstaller();
}
CheckInstaller();
InstallOne(k,'rega');
CheckInstaller();
WriteLogLine("Finished installation");
UpdateProgressBar(Math.round((ce/programs.length)*100));
Pause(0,250);
}
После данных изменений глюк с зацикливанием больше не проявляется, я после этого по крайней мере раз десять уже переписывал свой конфиг - все работает !