Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Вопросы По WPI
Показать сообщение отдельно

Новый участник


Сообщения: 19
Благодарности: 3

Профиль | Отправить PM | Цитировать


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);
    }
После данных изменений глюк с зацикливанием больше не проявляется, я после этого по крайней мере раз десять уже переписывал свой конфиг - все работает !



Отправлено: 18:47, 03-08-2006 | #251

Название темы: Вопросы По WPI