Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: omals
Дата сообщения: 14.02.2007 09:20
2 Dima555555

Цитата:
ну а мне то кто поможет ? как сделать чтоб при установки можно было выбрать загружать приложение вместе с Windows ?



[Tasks]
Name: RunMyProgrammInStartup; Description: "звпускать программу при загрузке винды?";

[Registry]
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run\"; ValueType: string; ValueName: "MyProgramm"; ValueData: "{app}\MyProgramm.exe"; Flags: uninsdeletevalue; Tasks: RunMyProgrammInStartup;
; можна и в LOCAL MACHINE записать, но тут уж нужно думать, а надо ли?
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run\"; ValueType: string; ValueName: "MyProgramm"; ValueData: "{app}\MyProgramm.exe"; Flags: uninsdeletevalue; Tasks: RunMyProgrammInStartup;
Автор: NikodimS
Дата сообщения: 14.02.2007 10:29

Код: там правда нужно поиграть с правильным формированием строки tmpStr
но ето уже дело техники и за несколько попыток мона сделать (я думаю
Автор: omals
Дата сообщения: 14.02.2007 11:16
2 NikodimS

Цитата:
Не получается что-то, пишет: в такой-то(моей) dll отсутвует UpdateBase(функция ).

а может надо запустить rundll32.exe
Rundll loads and runs 16-bit DLLs, whereas Rundll32 loads and runs 32-bit DLLs. If you pass the wrong type of DLL to Rundll or Rundll32, it may fail to run without indicating any error messages.

ну а она там есть, эта функция?
проверь используя шото типа
http://www.dependencywalker.com/


Цитата:
будет ли он работать в win95? или туда надо коприровать RUNDLL.EXE?

шо не помню то не помню
см. тут
http://support.microsoft.com/kb/164787
Автор: NikodimS
Дата сообщения: 14.02.2007 12:29

Цитата:
ну а она там есть, эта функция?
проверь используя шото типа

есть, ведь яж сам писал dll-ку.
со строчкой tmpStr разобрался, действительно надо было поколупаться: я убрал пару кавычек.

щас опять та же проблема, почему то есть exe-шник(простой, запускающий функцию из dll), который лежит рядом с dll - он ее свободно запускает(dll), а скрипт не запускает ее, потому что опять же откуда то из временой папки винды запускает dll.
Фишка в том, что dll должна лежать в определенном каталоге и только "оттудыва" запускаться функция из ее библиотеки, только тогда она отработает правильно.
как быть?
Автор: omals
Дата сообщения: 14.02.2007 13:30
а правильно задано рабочий каталог?
ну где именно лежит то длл
возможно тут проблема то
PWorkDir:= ExpandConstant('{app}');
Автор: NikodimS
Дата сообщения: 14.02.2007 14:20
Да, была проблема в пути, указал правильно каталог с
Ex := ExpandConstant('{app}') + '\Rundll32.exe'
Так как все запускающие файлы должны лежать в определенном каталоге, то я это файл копирую скриптом пред запуском функции.
Все заработало, но только в windows XP.
В win95 инсталяшка просто спотыкается и виснет при запуске функции, по-видимому при запуске Rundll32.exe.
Если взять этот файл из XP, тогда в 95-й винде Exec() выдает ошибку 31:"Присоединенное к системе устройство не работает" и требует какую-то отсутсвующую функцию в библиотеке kernel32.dll
Третий способ загрузки функции из dll и он не подходит..
интересно, есть еще способы?



Добавлено:
одна из идей : отключить создание временных папок во время выполнения скрипта. тогда бы возможно заработали первые два способа.
Может как то можно это отключить?
Автор: omals
Дата сообщения: 14.02.2007 15:33
2 NikodimS
скорее всего проблема тут под в95 именно в длл, а не в скрипте
просто в коде длл надо все системые функции проверить, поддерживаются ли они в в95


по тому линку http://support.microsoft.com/kb/164787
Special Notes On Differences Between Windows 95 And Windows NT
On Windows NT, Windows 2000, and Windows XP the behavior of Rundll32.exe is slightly different, in order to accommodate UNICODE command lines.

Windows NT first attempts to GetProcAddress for <EntryPoint>W. If this entry point is found, then the prototype is assumed to be: void CALLBACK
EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,
int nCmdShow);
                
This is the same as the ANSI EntryPoint, except that the lpszCmdLine parameter is now a UNICODE string.

If the <EntryPoint>W entry point is not found, then Windows NT will GetProcAddress for <entrypoint>A and for <entrypoint>. If either is found, then it is considered an ANSI entry point and is treated the same way as Windows 95/98/Me. Therefore, if you want your DLL to run on Windows 95 with ANSI support and on Windows NT/2000/XP with UNICODE support, you should export two functions: EntryPointW and EntryPoint. On Windows NT/2000/Me, the EntryPointW function will be called with a UNICODE command line; on Windows 95/98/Me, the EntryPoint function will be called with an ANSI Command line.
Автор: NikodimS
Дата сообщения: 14.02.2007 15:39
Я же говорил, рядом для теста положил обычный exe-шник, который запускает на выполнение функцию из этой dll, он чисто отрабатывает в win 95.
Поэтому дело не в dll.
другое дело в Rundll32
Автор: CapsLosk
Дата сообщения: 15.02.2007 02:24
Есть программеры?
Как победить такую вещь!????
Дано:


function InitializeSetup(): Boolean;
var

sLocation: String;
iShowCmd: Integer;
iErrorCode: Integer;
bRun: Boolean;

begin
ExtractTemporaryFile('splash.exe'); //Извлечение "временной" программы.
sLocation := ExpandConstant('{tmp}');
bRun := Exec(sLocation + '\splash.exe', '', sLocation, SW_SHOW, ewNoWait, iErrorCode);
Sleep(1500); //пауза между splash и копированием во временную папку.
Result := True;
end;



procedure InitializeWizard();
var
Form: TSetupForm;
ProgressBar: TNewProgressBar;
StaticText: TNewStaticText;
BitmapImage: TBitmapImage;
BitmapFileName: String;
s: string;
width, height: Integer;
pfunc: LongWord;
begin

WizardForm.CancelButton.BringToFront;


Form := CreateCustomForm(); //@@@


pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 500, pfunc);

try
with Form do
begin
ClientWidth := ScaleX(380);
ClientHeight := ScaleY(120);
BorderStyle:= bsDialog;
Left:= GetSystemMetrics(16) - ClientWidth - ScaleX(12);
Top:= GetSystemMetrics(17) - ClientHeight - ScaleY(12);
FormStyle := fsStayOnTop;
end;
WizardForm.Position := poScreenCenter;
WizardForm.DirBrowseButton.OnClick:= @DirOnClick;
MainForm.BORDERSTYLE := bsNone;
width := GetSystemMetrics(0);
height := GetSystemMetrics(1);
MainForm.Width := width;
MainForm.Height := height;
width := MainForm.ClientWidth;
height := MainForm.ClientHeight;
ExtractTemporaryFile('My_Image.bmp');
s := ExpandConstant('{tmp}') + '\My_Image.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Left := 0;
BackgroundBitmapImage.Top := 0;
BackgroundBitmapImage.Width := width;
BackgroundBitmapImage.Height := height;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch := True;
BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Left := ScaleX(8);
BitmapImage.Top := ScaleY(8);
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Form;
StaticText := TNewStaticText.Create(Form);
StaticText.Top := BitmapImage.Top;
StaticText.Left := BitmapImage.Left + BitmapImage.Width + ScaleX(8)
StaticText.Caption := 'Подождите пока программа установки подготовит файлы,' +
+ #10#13 + 'Это может занять какое-то время.';
StaticText.AutoSize := True;
StaticText.Parent := Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Отмена';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
ProgressBar := TNewProgressBar.Create(Form);
with ProgressBar do
begin
Height := CancelButton.Height - ScaleY(8);
Width := Form.Width - ScaleX(128);
Top := CancelButton.Top;
Left := BitmapImage.Left;
Parent := Form;
Min:= 0;
Max:= 30;
Position := 0;
end;
Form.ActiveControl := CancelButton;
Form.Show();
begin
Form.Repaint;
Sleep(200);
CheckCancel;
ExtractTemporaryFile('pic1.bmp'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 1;
CheckCancel;
ExtractTemporaryFile('pic2.bmp'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 1;
CheckCancel;
ExtractTemporaryFile('pic3.bmp'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 1;
CheckCancel;
ExtractTemporaryFile('pic4.bmp'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 1;
CheckCancel;
ExtractTemporaryFile('pic5.bmp'); //Извлечение "временной" программы.
ProgressBar.Position:= ProgressBar.Position + 1;
CheckCancel;
ExtractTemporaryFile('My_Image.bmp');
ProgressBar.Position:= ProgressBar.Position + 3;
CheckCancel;
ExtractTemporaryFile('2.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
CheckCancel;
ExtractTemporaryFile('3.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
CheckCancel;
ExtractTemporaryFile('4.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
CheckCancel;
ExtractTemporaryFile('5.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
CheckCancel;
ExtractTemporaryFile('6.gif');
ProgressBar.Position:= ProgressBar.Position + 3;
CheckCancel;
ExtractTemporaryFile(ExpandConstant('sound.wav')); //Извлекаем звуковой файл во временную папку
ProgressBar.Position:= ProgressBar.Position + 3;
CheckCancel;
end;
finally
Form.Free();
If RunTask('Splash.exe', false) then
begin
KillTask('Splash.exe');
end else
Exit;
end;
sleep (357)
MainForm.Visible := True;
end;



Как видно сдесь сначало выскакивает Splash.exe, за тем окошко с процесс-граббером.
Проблема в том что это окошко оказывается под Spash-ем!

Как сделать чтоб оно прикрывала Splash, а не заскакиволо, под него.
Нужен именно Splash.EXE!!!
Автор: NikodimS
Дата сообщения: 15.02.2007 08:44
Все, поборол проблему, решение нашел на сайте разработчика.
Как и предполагал ранее

Цитата:
одна из идей : отключить создание временных папок во время выполнения скрипта. тогда бы возможно заработали первые два способа.
Может как то можно это отключить?


я снял галочку в ISTool в Setup Options
на вкладке Compiler "Use setup loader".
Теперь все компилится в три файла и никаких временных папок при запуске не создается.
Я все эти три файла кидаю в нужную папку и все отрабатывает как надо.

Всем спасибо за помощь, особенно omals, Вы мне помогли глубже разобраться в Inno Setup.
Автор: CapsLosk
Дата сообщения: 16.02.2007 01:19
CapsLosk
Кто нить поможет???
Автор: Sero
Дата сообщения: 16.02.2007 14:34
Jeff_Trust
В следующей версии Inno будет возможно реализовать это...
Автор: Jeff_Trust
Дата сообщения: 16.02.2007 22:17
Sero

Печально, так как на данный момент никаких вариантов нету?
PS А откуда если не секрет известно что в следующей версии Inno будет возможность реализовать это? и когда она ориентировочно выйдет?

В принципе можно сделать текст просто как часть рисунка, но этот же рисунок отображается и на странице окончания установки. Может есть вариант прикрутить еще одну картинку, типа WizModernImage 2, но возможно ли это сделать?
Автор: YurikWiz
Дата сообщения: 16.02.2007 23:42
Midway
Спасибо, добрый человек.
Автор: Sero
Дата сообщения: 18.02.2007 00:31
Jeff_Trust
Скоро будет новая версия,очень скоро - будем ждать...
Цитата:
В принципе можно сделать текст просто как часть рисунка, но этот же рисунок отображается и на странице окончания установки. Может есть вариант прикрутить еще одну картинку, типа WizModernImage 2, но возможно ли это сделать?

Мне нужно время.
Автор: Jeff_Trust
Дата сообщения: 18.02.2007 08:55
Sero

ОК, заранее спасибо, посмотри пожалуйста что можно сделать.
Автор: Sero
Дата сообщения: 18.02.2007 13:31
Jeff_Trust
Сделал, забирай
Автор: DocBeen
Дата сообщения: 18.02.2007 19:55
Доброго времени суток Коллеги и форумчане - столкнулся с такой проблемой: необходимо в установку включить BDE при попытке сгененрировать код с помощью ScriptMaker ругается на то что необходимо установить ISPP Inno Setup Preprocessor - нашел я библиотечку в инете -
ISCmplr.dll - но выход то какой? - Пытаюсь заменить сей Файлик в каталоге с Инно - потом не запускается компилятор,

Подскажите пожалуйста как включить можно в инстоллятор - установку BDE...
В каталоге с ScriptMaker есть BDE - но какие ключи реестра и запуска БДЕ?
Можно и отдельно я Знаю, не не выход Это....


Буду много признателен....
Автор: Sampron
Дата сообщения: 19.02.2007 01:10
DocBeen

Цитата:
Подскажите пожалуйста как включить можно в инстоллятор - установку BDE...
В каталоге с ScriptMaker есть BDE - но какие ключи реестра и запуска БДЕ?
Можно и отдельно я Знаю, не не выход Это....

http://forum.sources.ru/index.php?showtopic=155917
Автор: Jeff_Trust
Дата сообщения: 19.02.2007 07:47
Sero
Вышла новая версия Inno Setup

http://www.jrsoftware.org/download.php/is.exe

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

Помоги пожалуйста со скриптом.
Автор: Shaman2
Дата сообщения: 19.02.2007 12:34
где можно скачать Inno Setup Extensions Knowledge Base ?
По сылке с шапки не качается

Добавлено:
А где скачать Руководство по расширенным возможностям Inno Setup ?
На рапидшаре файлы отсутствуют, выложите пожалуйста на какой-то обменник (желательно не рапидшару)
Автор: NightW0lf
Дата сообщения: 19.02.2007 13:56
ВНИМАНИЕ ВСЕМ!

Вот МОЙ русификатор для Inno Setup v5.1.10

ПРИМЕЧАНИЕ
РУСИФИКАТОР ВКЛЮЧАЕТ В СЕБЕ:
Cправку, Inno Setup Extensions Knowledge Base, руководство пользователя by Kindly – на Русском языке в директории USER_GUIDE.

Автор: koc
Дата сообщения: 19.02.2007 16:33
Люди, вопросище такой: Кто-нить пробовал связаться с девелопером этой софтины, чтоб он в следущей версии включил наработки Genri (JPG_Progress)? Просто очень полезная функция.
Автор: boss911
Дата сообщения: 19.02.2007 17:28
Обидно, но innounp 0.18 уже неподходит для Inno Setup 5.1.10

Как думаите, обновление, этой полезной утилиты будет? Без нее уже невозможно работать!
Автор: DenFed
Дата сообщения: 19.02.2007 21:00
Нужно сделать установку драйвера, подскажите как убрать все окошки с приветствиями и диалогами.
Автор: Sero
Дата сообщения: 19.02.2007 21:26
Jeff_Trust
Страно, но такой функции в новой версии нет.
Автор: Sampron
Дата сообщения: 19.02.2007 21:49

Цитата:
Страно, но такой функции в новой версии нет.

Лажа полная.
Автор: klarkie
Дата сообщения: 20.02.2007 04:04

Цитата:
Обидно, но innounp 0.18 уже неподходит для Inno Setup 5.1.10


А что там такого в кодах поменяли?


Цитата:
подскажите как убрать все окошки с приветствиями и диалогами


Попробовать в разделе Setup выставить разные DisableProgramGroupPage=yes, DisableDirPage=yes, DisableFinishedPage=yes, DisableReadyPage=yes, DisableStartupPrompt=yes. Выбирай, что из этого нужно.
Автор: ViSiToR
Дата сообщения: 20.02.2007 10:13
Привет всем!

Есть пару вопросов:

1) Возможно ли обойти ограничение на длину одной строки? строка в 20000 символов уже не проходит

2) При попытке импортировать строку содержащую символ : (двоеточие) в начале, выводится ошибка, как это решить?

Вот строка:


Код: [no]Filename: {app}\profile\menu\ac_menu.ini; Section: Hotclick Popup Menu; Key: [/no]: [no]li.innerHTML; String: "'
Цитата:
'+li.innerHTML+'
'; break; case 'IMG' : li.innerHTML+=' '; break;}}; var txt = html_selection.innerText; var n = txt.split('\n').length; var ta = window.document.getElementsByTagName('textarea'); var t=ta[ta.length-1]; if(!t){{prompt('Please copy BBCode', txt); return;} if(t.rows < 15){{t.rows + n <= 15 ? t.rows += n : t.rows = 15};t.focus(); var tr=document.selection.createRange(); tr.text += '
Цитата:
'+txt+'
'; t.setSelectionRange(t.selectionEnd-txt.length-15, t.selectionEnd+n-1);return;} var s=document.selection.createRange(); var sl=s.text.length; if(s.text.indexOf('
Цитата:
')==0 && s.text.lastIndexOf('
')==(sl-8)) {{var st=s.text.substring(7, sl-8);s.text=st;} else {{var st='
Цитата:
'+s.text+'
';s.text=st;} var e=lastChangedElement;if (!e) return; if(sl!=0) e.setSelectionRange(e.selectionEnd-st.length, e.selectionEnd); else e.setSelectionRange(e.selectionEnd-8, e.selectionEnd-8); e.focus();})()"",,, ""Quote"""[/no]
Автор: NightW0lf
Дата сообщения: 20.02.2007 12:09
ВНИМАНИЕ ВСЕМ!

Вот вот еще вечные зеркала на МОЙ русификатор для Inno Setup v5.1.10:

Зеркало 1
Зеркало 2

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: ICONS


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.