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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » Вопросы По WPI

Ответить
Настройки темы
Вопросы По WPI

Аватара для DenchikK

Старожил


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

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


Изменения
Автор: Petya V4sechkin
Дата: 10-02-2014




Windows Post Install Wizard (WPI)
Официальный сайт WPI
Официальный форум WPI на MSFN.org

Обзор WPI в статье "Выбор устанавливаемых приложений" (там рассказ о старой версии, но кое-что почерпнуть можно)

Для тех кто в танке: WPI не волшебная палочка и сама по тихому программы устанавливать не умееет!!!
Очень внимательно читаем материалы хотя бы по этим и этой ссылкам!


Полезные сообщения в теме:

Отправлено: 03:34, 10-03-2005

 

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


Сообщения: 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


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


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

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


Ok, tnhx, возьмем на заметку, правда я за это время свой скрипт с гуем успел накалякать на AutoIt.
Суть такова, на стадии T12 запускаем скрипт, он с инишника считывает приложения и выводит массив чекбоксов.
Для отмеченных создаются ключи в RunOnceEx.
Для выбранного приложения можно запустить 2 дополнительных и импорт файла реестра.
Если есть интерес - могу выложить.

Отправлено: 08:05, 08-08-2006 | #252


Аватара для godoo

Пользователь


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

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


DeleteIt Интерес есть. Выложи пожалуйста.

Отправлено: 13:05, 08-08-2006 | #253


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


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

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


Ок, ловите, только чур ногами не больно пинать т.к. с AutoIt знаком лишь неделю.
Ограничения: т.к. скрипт запускается на стадии T12 - разрешение всего 640*480, больше 60 приложений в диалог уже трудно вместить.
Это собственно скрипт:
Код: Выделить весь код
#include <Array.au3>
#include <GuiConstants.au3>
#Include <process.au3>

Opt("GUIOnEventMode", 1)

;~ Переменные используемые в скрипте:
;~ $Border - Отступ\промежуток между колонками checkbox
;~ $HOtst - отступ сверху
;~ $wicol - ширина checkbox
;~ $nrow - кол-во рядов checkbox
;~ $distr - путь к папке с дистрибутивами на CD

Dim  $ns, $ps, $ks, $inifile = @ScriptDir & '\AppInstall.ini', $distr='\Soft\'
Dim $Border = 10, $HOtst = 30, $YCurr = $HOtst, $XCurr = $Border, $ncol = 3, $wicol = 190, $nrow = 20, $currrow = 1
Dim $CHB_ARRAY
Dim $CD=OsGetCD ('Win51')
Const $Key='HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx'
$cnt_sect = IniReadSectionNames($inifile)
	GuiCreate("Установка приложений", 620, 460,-1, -1)
	GUICtrlCreateLabel ('Выберите приложения для автоматической установки:', 100, 15)
	GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    For $i = 1 To $cnt_sect[0]
		$ns=IniRead ( $inifile, $cnt_sect[$i], "Name", "0" )
		$ps=IniRead ( $inifile, $cnt_sect[$i], "Path", "0" )
		If $ns <> '0' And $ps <> '0' Then
			$ind=$cnt_sect[$i]
			If $CHB_ARRAY=="" Then
				$CHB_ARRAY=$ind
			Else
				$CHB_ARRAY = $CHB_ARRAY & '-' & $ind
			EndIf			
		EndIf
	Next
	$CHB_ARRAY = StringSplit ($CHB_ARRAY, '-')
	Dim $int = $CHB_ARRAY[0]
	Dim $CH_ARRAY[$int]
 	For $i = 1 To UBound ($CHB_ARRAY) - 1
		$ns=IniRead ( $inifile, $CHB_ARRAY[$i], "Name", "0" )
		$ind = $i-1
		$currrow = $currrow + 1
		$CH_ARRAY[$ind] = OsCreateChBox ($ns, $XCurr, $YCurr, $wicol, 15)
		$YCurr=$YCurr + 20
		If $currrow > $nrow Then
			$YCurr=$HOtst
			$XCurr=$XCurr + $wicol + $Border
			$currrow = 0
		EndIf
	Next

	GUISetState (@SW_SHOW)
			While 1
				Sleep(10)
			Wend

Func OsGetCD ($file)
	$var = DriveGetDrive("CDROM")
		If NOT @error Then
			For $i = 1 to $var[0]
				If FileExists ($var[$i] & '\' & $file) Then
				MsgBox(4096,"Found CDROM" & $i, 'Installation CDROM  Label is - ' & $var[$i] & @CRLF & 'Starting Setup.')
				$CD = $var[$i]
				EndIf
			Next
		EndIf
		Return $CD
	EndFunc
		
Func SpecialEvents ()
	_RunDos('REG ADD ' & $Key & ' /V TITLE /D "Installing Applications" /f')
	For $i = 0 to UBound ($CH_ARRAY) - 1
					$chstate = GUICtrlRead ($CH_ARRAY[$i])
					$ind = $i + 1
					$ns=IniRead ( $inifile, $CHB_ARRAY[$ind], "Name", "0" )
					$ps=IniRead ( $inifile, $CHB_ARRAY[$ind], "Path", "0" )
					$ps2=IniRead ( $inifile, $CHB_ARRAY[$ind], "Path2", "0" )
					$ps3=IniRead ( $inifile, $CHB_ARRAY[$ind], "Path3", "0" )
					$reg=IniRead ( $inifile, $CHB_ARRAY[$ind], "Reg", "0" )
					
					If StringLen ($ind) = 1 Then
						$ind = '00' & $ind
					Else
						$ind = '0' & $ind
					EndIf
					
					If Number($chstate) = Number($GUI_CHECKED) Then
						_RunDos('REG ADD ' & $Key & "\" & $ind & ' /VE /D "' & $ns & '" /f')
						_RunDos('REG ADD ' & $Key & "\" & $ind & ' /V 1 /D "' & $CD & $distr & $ps & '" /f')
						If $ps2 <> '0' And $ps2 <> '' Then
							_RunDos('REG ADD ' & $Key & "\" & $ind & ' /V 2 /D "' & $CD & $distr & $ps2 & '" /f')
						EndIf
						If $ps3 <> '0' And $ps3 <> '' Then
							_RunDos('REG ADD ' & $Key & "\" & $ind & ' /V 3 /D "' & $CD & $distr & $ps3 & '" /f')
						EndIf
							If $reg <> '0' And $reg <> '' Then
							_RunDos('REG ADD ' & $Key & "\" & $ind & ' /V 4 /D "' & 'REGEDIT /S ' & $CD & $distr & $reg & '" /f')
						EndIf
					EndIf
					
				Next
				Exit
			EndFunc
			
Func OsCreateChBox ( $Label, $posX, $posY, $L, $H)
	$Curr_CHB = GuiCtrlCreateCheckbox($Label, $posX, $posY, $L, $H)
	GUICtrlSetState ($Curr_CHB, 1)
	Return $Curr_CHB
	EndFunc
Формат ini в этом случае такой:
AppInstall.ini
Код: Выделить весь код
; Примечание, если в пути есть кавычки - перед ними необходим слеш \" !!!

[1]
Name=Outpost Firewall 3.51
Path=OutPost\setup.exe
Path2=
Path3=
Cond=
Reg=

...

[3]
Name=Ligth Alloy 4
Path=LA\LAsetup.exe /S \"/Path=%ProgramFiles%\LA\" /StMenu=1 /Desktop=1 /Assoc=0
Path2=
Path3=
Cond=
Reg=
....

[14]
Name=PoverDVD 7
Path=PoverDVD\PowerDVD7.exe
Path2=PoverDVD\Russ.exe
Path3=
Cond=
Reg=PoverDVD\powerdvd.reg
Параметр Cond - никак пока не используется.
Имена секций - цифры по порядку,
Я компилированный скрипт и ini файл кидаю в $OEM$ и вызываю из батника через cmdlines.txt после установки DX и пр. софта необходимого на любой машине.

Отправлено: 16:48, 08-08-2006 | #254


Ветеран


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

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


Вложения
Тип файла: 7z WPI.7z
(2.9 Kb, 24 просмотров)

Здравствуйте все.
Ставлю софт с CD-Roma с помощью WPI 5.2. (До этого пользовал 4.3.8, все было нормально). Теперь при запуске WPI выскакивает ошибка сценария:
Код: Выделить весь код
Строка: 42
Символ: 3
Ошибка:Объектная переменная или переменная блока With не задана"
Код: 0
URL: file://d:\soft\wpi52\wpi.hta
Как быть?

вот здесь
Перешел на 5.3, и все получилось...

Последний раз редактировалось snark, 09-08-2006 в 13:48.


Отправлено: 11:38, 09-08-2006 | #255


Аватара для Sanja Alone

Ищу Человека…


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

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


Вложения
Тип файла: zip WPIScripts_mod_v53.zip
(4.3 Kb, 43 просмотров)

Вышла новая версия WPI - 5.3 (8 августа 2006) Список изменений.

Впечатления от перехода с версии 5.1 на 5.3:
  • Заметно некоторое ускорение WPI (полностью выброшен режим дебага -> уменьшилось к-во проверок в скриптах). Но это и потенциальный источник проблем - авторы WPI теперь могут допускать больше ошибок. То что они это умеют было заметно и по предыдущим версиям
  • Менюшки настройки, imho, стали похуже, да и с подписями авторы сильно напутали. Мне это как бы все равно, т.к. я всегда настройки вписывал вручную в соотв. js-файлы, но для простых юзеров это плохое "улучшение"...
  • Пропадание таймера при его отключении действительно удобно.
  • Не радует окончательная дезинтеграция кнопки "Manual". Выходит, что руководство по программе никто писать не собирается...
  • Очень удобна новая возможность изменения цвета выбранных для установки приложений (класс .chktxt в файле Themes\Имя_темы\wpi.css). Поставил себе приятный зеленый цвет color: #7DF27D;.
Вот такие двоякие эмоции вызвала у меня новая версия...

Модифицированные скрипты для WPI 5.3 с отключенным функционалом отметки чекбоксов категорий вкладываю в этот пост.

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)


Отправлено: 09:46, 10-08-2006 | #256


Аватара для Dark Engel

Старожил


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

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


господа обьясните идиоту плиз. В свое время запускал WPI 4xxx через RunOnceEx.cmd и усе работало. Но в 5 версии больше нет WPI.cmd и я не знаю как его запустить после установки. Пытался в стартовой строке заменить WPI.cmd на WPI.hta не сработало. Плиз хелп как его после инсталла на автостарт запихнуть.

-------

"Чем больше мы умнеем, тем больше понимаем что мы глупцы."


Отправлено: 16:41, 16-08-2006 | #257


Старожил


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

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


Dark Engel
Цитата:
Но в 5 версии больше нет WPI.cmd и я не знаю как его запустить после установки.
Как это нет? Через него и запускаю. Разве что в дистрибе он не идет.

Отправлено: 18:52, 16-08-2006 | #258


Аватара для Dark Engel

Старожил


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

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


Цитата:
Как это нет? Через него и запускаю. Разве что в дистрибе он не идет.
так его в дистре нет. где взять ?

-------

"Чем больше мы умнеем, тем больше понимаем что мы глупцы."


Отправлено: 19:27, 16-08-2006 | #259


Старожил


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

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


У меня как было все настроено, так и осталось. Через wpi.cmd от старой версии. Только каталог WPI подсунул от новой версии и заново все программы вбил, т.к. подсунуть старые настройки не получилось.

Отправлено: 13:51, 17-08-2006 | #260



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка Windows 2000/XP/2003 » Вопросы По WPI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] создал WPI икону / WPI.ico / для него и файл Autorun.inf tim75 Хочу все знать 7 25-02-2013 06:48
WPI.autorun Pris Автоматическая установка Windows 2000/XP/2003 10 16-01-2012 06:07
Пакет русификации WPI .:[все вопросы]:. Aspirine Автоматическая установка Windows 2000/XP/2003 19 08-08-2010 01:43
wpi-wpi d2201 Автоматическая установка Windows 2000/XP/2003 11 13-04-2005 10:19
PROXY-сервера ---- вопросы, вопросы, вопросы Galosh Хочу все знать 2 09-07-2003 00:57




 
Переход