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

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

Автор: serg_aka_lain
Дата сообщения: 26.02.2008 23:30
Sandy Ann


Цитата:
SaveStringToFile(ExpandConstant('{app}') + '\file.ini', 'CDDrive1=S:' + #13#10, true);
Какая буква диска пропишется в параметр CDDrive ? Из переменной {app}?


Нет, я не сразу увидел

Цитата:
где S:\Game\NANCY={app}
тогда так

SaveStringToFile(ExpandConstant('{app}') + '\file.ini', 'CDDrive1=' + ExpandConstant('{app}') + #13#10, true); - пропишется "{app}";


Автор: GRom V
Дата сообщения: 27.02.2008 04:44
КтоНить!!! из львов Инносетапики ну подскажите как при разбитом инсталляторе (при сообщении о смени диска) выполнить действие1, а при вставке ПРОСЯЕМОГО действие2
Очень надо.....
Автор: elapse
Дата сообщения: 27.02.2008 08:46
GRom V, в Inno Setup нельзя изменять действия, связанные с NewDiskForm - секция [Code] этого не поддерживает / не позволяет. Единственное (или нет?) решение - попытаться перекомпилить исходники.
Автор: GRom V
Дата сообщения: 27.02.2008 13:29
elapse
Блин......жаль
Спасибочки
Автор: Diawer
Дата сообщения: 27.02.2008 19:34
У меня изображение находиться в левом-вехнем углу, подскажите как разместить
его под ProgressBar`ом, и проверьте пожалуйста правильность кода, нет ли чего лишнего.

[Code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
iCurr: Integer;
SlideImage: TBitmapImage;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do
Result := (Position-Min) / ((Max - Min) / 100);
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
if (PercentProgress > 30) and (PercentProgress < 50) and (SlideImage.Tag <> 1) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_2.bmp'));
SlideImage.Tag := 1;
end
else
if (PercentProgress > 50) and (PercentProgress < 80) and (SlideImage.Tag <> 2) then
begin
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_3.bmp'));
SlideImage.Tag := 2;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpInstalling then
begin
pfunc := WrapTimerProc(@OnTimer, 4);
TimerID := SetTimer(0, 0, 100, pfunc);

WizardForm.Center;

SlideImage := TBitmapImage.Create(WizardForm);
SlideImage.Top := WizardForm.Bevel1.Top + WizardForm.Bevel1.Height;
SlideImage.Width := ScaleX(400);
SlideImage.Height := ScaleY(150);
SlideImage.Stretch := True;
SlideImage.Bitmap.LoadFromFile(ExpandConstant('{src}\Image_1.bmp'));
SlideImage.Parent := WizardForm.InnerPage;
end;

if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then WizardForm.InnerNoteBook.Show;

if (CurPageID > wpInstalling) and (iCurr = 0) then
begin

WizardForm.Center;

SlideImage.Hide;
WizardForm.ProgressGauge.Hide;

iCurr := 1;

KillTimer(0, TimerID);
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
Автор: Sandy Ann
Дата сообщения: 27.02.2008 19:38
serg_aka_lain
Извеняйте, не катит код. Получается что параметры во всех ключах это содержимое переменной {app}. А мне надо разбить переменную на две части. Как на коде:

Код: [Nancy Data]
HDDrive=S:
IDPath=\\Game\NANCY
Автор: elapse
Дата сообщения: 27.02.2008 20:01

Цитата:
код вычисления, мне не известный

Sandy Ann, "как мастер Йода говоришь ты" (с).
[more=Подробнее]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Code]
function GetAppDrive(Param: String): String;
begin
Result := Copy(ExpandConstant('{app}'), 1, 2)
end;

function GetFullPathWithoutDrive(Param: String): String;
begin
Result := '\' + Copy(ExpandConstant('{app}'), 3, Length( ExpandConstant('{app}') )-2)
end;

[INI]
FileName: "{app}\Game.ini"; Section: "Nancy Data"; Key: "HDDrive"; String: "{code:GetAppDrive}";
FileName: "{app}\Game.ini"; Section: "Nancy Data"; Key: "IDPath"; String: "{code:GetFullPathWithoutDrive}";
[/more]


Добавлено:
Diawer, а чем Вам не угодил код, предложенный serg_aka_lain? Если не ошибаюсь, он скидывал Вам его в ПМ. К слову, скачал уже скомпанованный инсталл - всё соответствуют Вашим требованиям. Или я ошибаюсь?
Автор: Sandy Ann
Дата сообщения: 27.02.2008 22:42
elapse
Спасибо Большущеее!!!
Автор: Diawer
Дата сообщения: 28.02.2008 04:45
elapse
В нём смена изображения происходит по времени, для меня удобнее по процентам.
Автор: geranik
Дата сообщения: 28.02.2008 20:35
Я хочу сделать, чтобы при удалении проверялся ключ в реестре, и если его нет - то удалить ключи в реестре (другие). Если есть - не удалять.
Вот часть задумки:
[more]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
DisableProgramGroupPage=yes
OutputBaseFilename=setup

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CuruninstallStep = usUninstall then
begin
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\1'); //плохо определяет (чего-то не хватает)
MsgBox('найден',mbinformation, mb_ok)
exit; //если есть ничего не делать
end else
begin
if CuruninstallStep = usUninstall then
begin
RegDeleteKeyIfEmpty(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\2');
MsgBox('удалён',mbinformation, mb_ok) //сообщения не нужны
end
end;
end;
[/more]
Автор: elapse
Дата сообщения: 28.02.2008 21:43
geranik, хм, почти всё правильно. Единственное, что можно [more=посоветовать]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CuruninstallStep = usUninstall then
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\1') then
begin
MsgBox('Ключ реестра найден!',mbInformation, mb_Ok);
Exit;
end
else
begin
// Удалять ключ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\2, если он пуст
RegDeleteKeyIfEmpty(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\2');
MsgBox('Ключ реестра удалён', mbInformation, mb_Ok);
end;
end;
[/more], это отказаться от ненужного повторения
Код: if CuruninstallStep = usUninstall then
Автор: Victor_Dobrov
Дата сообщения: 29.02.2008 01:48
Corona Skin & Check System Requirements (400 Кб в архиве) - расширение инсталлятора Inno Setup.
Исправлены ошибки. Настройка на язык (сообщения, лицензия, InfoBefore, InfoAfter) теперь делается одной строкой. Пример:

[Languages]
#expr AddLocale('Russian', 'compiler:Languages\Russian.isl', 'ReadMeRus.rtf', '', 'ReadMeRus.rtf'), AddLocaleFiles
Автор: GRom V
Дата сообщения: 29.02.2008 02:50
Как то Victor_Dobrov выкладывал вариант слайдшоу с SBSlideShow.scr.
Для тех кто как и я сталкнулся с проблемой (при разбитом на несколько дисков инсталляторе - при смене диска выскакивала ошибка) вот исправленый вариант SBSlideShow.scr от Serbis. Огромное ему спасибо.
http://serbis.net.ru/ExeFiles/LCC/SBSlideShow.scr
Автор: geranik
Дата сообщения: 29.02.2008 10:45
elapse Спасибо! супер.
Сделал как ты рекомендовал. Всё правильно вычисляет.
А то с корректировкой раньше не совсем было.
Автор: RazdorX
Дата сообщения: 29.02.2008 12:44
Как сделать так, чтобы установщик проверял ключ реестра и при его отсутствии выдавал сообщение, вроде "Необходимо установить programm перед установкой mymod"
Для примера ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\programm\1.0, строковой параметр Install Path. Если параметра нет - установка прекращается.
Автор: noiseless
Дата сообщения: 29.02.2008 12:52
RazdorX

[Code]
var
iPath: string;

function InitializeSetup(): Boolean;
begin
result:=false; //хотя эту строчку можно и не писать
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\programm\1.0', 'Install Path', iPath) then
result:=true;
else
MsgBox('Программа не установлена!' #13 'Установите программу!', mbcriticalError, MB_OK);
end;
Автор: RazdorX
Дата сообщения: 29.02.2008 14:09
noiseless
Поправка



Код:
var
iPath: string;

Function InitializeSetup(): Boolean;
begin
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\programm\1.0', 'Install Path', iPath) then
begin
result:=true;
end
else
MsgBox('Программа не установлена!' #13 'Установите программу!', mbcriticalError, MB_OK);
end;
Автор: omals
Дата сообщения: 29.02.2008 16:03
как для анинстала узнать запущена ли какая-то прога?
в инстале через функцию RunTask из ISTask.dll

а вот как в CurUninstallStepChanged это сделать?
делаю следующее

tmpStr:=ExpandConstant('{app}\ISTask.dll');
DLLHandle:=LoadDLL(tmpStr, ErrorCode);

tmpStr:='IEXPLORE.EXE';
Par1:=CastStringToInteger(tmpRes);

CallDLLProc(DLLHandle, 'RunTask', Par1, 0, Res);
CallDLLProc(DLLHandle, 'KillTask', Par1, 0, Res);

FreeDLL(DLLHandle);

DLL грузится без проблем, функции RunTask и KillTask вызываются тоже
ВОПРОС: как мне от RunTask получить результат?
(запущен ли IEXPLORE.EXE или нет)???

помогите плз.


Автор: argnistkroleg
Дата сообщения: 29.02.2008 16:10


Возможно ли такое сделать без помощи битмапов, а задавая цвета в 16ричной кодировке?
Автор: elapse
Дата сообщения: 29.02.2008 17:13
argnistkroleg, можно, у большинства объектов в Inno Setup есть свойство Color. [more=Пример]
procedure InitializeWizard();
begin
WizardForm.Color := $494e48;
WizardForm.WelcomePage.Color := $686a65;
WizardForm.MainPanel.Color := $464646;
WizardForm.InnerPage.Color := $686a65;
WizardForm.Bevel.Hide;
WizardForm.Bevel1.Hide;
end;
[/more].
Автор: unikum111
Дата сообщения: 29.02.2008 19:21
Подскажите, пожалуйста, каким образом можно извлечь секцию [Code]? Насколько я понял нужно расшифровать файл CompiledCode.bin, но как это сделать я не знаю.
И ещё вопрос: для чего нужен rops-3.0.3.53-disasm.rar и как им пользоваться?
Автор: noiseless
Дата сообщения: 29.02.2008 19:43
RazdorX
Не обязательно. Можно и так вроде (там лишние точка с запятой стояли после true):

var
iPath: string;

Function InitializeSetup(): Boolean;
begin
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\programm\1.0', 'Install Path', iPath) then
result:=true
else
MsgBox('Программа не установлена!' #13 'Установите программу!', mbcriticalError, MB_OK);
end;
Автор: elapse
Дата сообщения: 29.02.2008 19:59
unikum111, фактически никак. Предложенный Вами дизассемблер лишь незначительно изменяет содержимое CompiledCode.bin, делая его лишь удобочитаемым, но не содержащим никакой информации из секции [Code] в таком виде, в котором многие привыкли её видеть.
Как пользоваться? В командной строке:
disasm input output,
где input - входящий файл, output - исходящий. Только, как я уже говорил, это не сильно поможет. Конечно, если Вы знаете языки низкого уровня...

Добавлено:
http://files.unn.ru/91886830200
http://data.cod.ru/57777946058
Реализовал предустановщик (форма с прогрессбаром в правом нижнем углу) а-ля InstallShield. Практической пользы - никакой, зато форма реагирует на щелчки (и прочие нехорошие действия) мыши, в отличие от других, ранее мелькавших примеров.
Автор: KurtWagner
Дата сообщения: 01.03.2008 00:07
Можа ли в лиц. соглаш. поставить кнопку "ПЕЧАТЬ" ????

Добавлено:
Братва, чет мне ет не помагает
[Run]
Filename: "{win}\regedit.exe"; Parameters: "/s {tmp}\Cursors.reg"; StatusMsg: "Распаковка рег-файла"

[_EndOfScript]



ПОМОГИТЕ!!! Как зарег. файл *.reg
Автор: elapse
Дата сообщения: 01.03.2008 08:14

Цитата:
Parameters: "/s {tmp}\Cursors.reg"

{tmp} ни о чём не говорит?
Где-то в коде должно произойти извлечение во временную папку:

Код: ExtractTemporaryFile('Cursors.reg');
Автор: The_Club
Дата сообщения: 01.03.2008 09:13
Здравствуйте!


Код: function NextButtonClick(CurPageID: Integer): Boolean;
var
i,j: integer;
s,c: string;
begin
Result := True;
if CurPageID = wpSelectDir then
begin
c := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
for i:=1 to length(WizardForm.DirEdit.text) do
for j:=1 to length(c) do
begin
if WizardForm.DirEdit.text[i] = c[j] then //{app} содержит русские символы
begin
s := 'В пути установки присутствуют русские буквы, что недопустимо'#13#13'Пожалуйста, повторите ввод.';
MsgBox(s, mbError, mb_Ok);
Result := False ; //запрет перехода на следующую страницу
exit;
end
else Result := True; //разрешаем переход на следующую страницу
end;
end;
end;
Автор: elapse
Дата сообщения: 01.03.2008 10:00
The_Club

Цитата:
Надо чтобы кроме английских букв, никаких других в пути установки не было.

А спецсимволы? Цифры? Только буквами path не задать.
Попробуйте [more=так]
function NextButtonClick(CurPageID: Integer): Boolean;
var
i: Integer;
begin
Result := True;
if CurPageID = wpSelectDir then
begin
for i := 1 to Length(WizardForm.DirEdit.Text) do
if WizardForm.DirEdit.Text[i] > #122 then
begin
MsgBox('В пути установки присутствуют русские буквы, что недопустимо.' #13#13
'Пожалуйста, повторите ввод.', mbError, mb_Ok);
Result := False;
Exit;
end;
end;
end;
[/more]
Автор: RazdorX
Дата сообщения: 01.03.2008 10:04
noiseless, ну можно и так. Главное, чтобы работало Этот вариант, думаю, как раз самый оптимальный
Автор: The_Club
Дата сообщения: 01.03.2008 10:17
elapse

Благодарю!
А если у пользователей не русский язык, а какой-нибудь другой. Как быть тогда?
Автор: elapse
Дата сообщения: 01.03.2008 10:30
The_Club, например, немецкий или французский? Все равно должно сработать. Или смущает текст поялвяющегося сообщения?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


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