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

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

Автор: Victor_Dobrov
Дата сообщения: 16.02.2008 10:39
Corona Skin & Check System Requirements (395 Кб) - расширение инсталлятора Inno Setup.

Исправлены неточности в текстах сообщений и на странице wpFinished.
F10 переключает компактный режим (на странице Лицензии покажет номер строки).
Ключ LogoCoord задаёт координаты X,Y логотипа на странице 'Приветствие'.
Анимация Copy.avi пережата в DivX, размер файла меньше на 65Кб.
Запуск с параметром командной строки /PASSWORD теперь не приводит к ошибке.
Автор: Angel_Smerti
Дата сообщения: 16.02.2008 17:13
Victor_Dobrov
У меня к тебе есть просьба как к автору скина можно ли убрать, при повторном запуске, это окно:

Суть вопроса такова: Это игровая сборка, что-то типа аддонов или точнее сохранений для игры, и есть сборка с основной игрой, а эта сборка как дополнения к основной игре. Мне необходимо чтобы после установки основной игры, тоже с использованием твоего скина, можно было запускать аддоны, но без окна деинсталляции при повторном запуске. Одновременно мне необходимо если основная игра не установлена, то и аддоны не должны устанавливается. Примерно как на картинке:

У меня есть один простой [more=скрипт]
[Setup]
AppName=The Sims 2
AppVerName=The Sims 2 & AddOns
DefaultDirName={pf}\The Sims 2

[Code]
Function InitializeSetup: Boolean;
Begin
if RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1')
or RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{80DB2577-43E3-4C34-00AF-0D7967B942C9}')
then
result:= true
else
MsgBox('{#SetupSetting("AppName")} не найдена!', mbInformation, mb_Ok)
End;

[/more], и один [more=твой переделанный]
#define ScreenSaver AddBackslash(SourcePath) + "\Corona\SBSlideShow.scr"
#define ImagesDir "Wallpaper"

[Setup]
AppName=The Sims 2
UninstallDisplayName=Mod The Sims 2

[Files]
#ifexist ScreenSaver
Source: {#ScreenSaver}; DestDir: embedded; Flags: dontcopy noencryption
#endif

[Code]
var ErrorCode: Integer; BackgroundForm: TForm;

function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';

Procedure BackgroundOnActivate(Sender: TObject); Begin if WizardForm.Visible then WizardForm.Show End;

Procedure InitializeBackground; Begin
BackgroundForm := TForm.Create(nil)
BackgroundForm.OnActivate:= @BackgroundOnActivate;
BackgroundForm.BorderStyle:= bsNone // BackgroundForm.Color := 0
ShowWindow(BackgroundForm.Handle, sw_ShowMaximized) // фоновое окно на полный экран
#ifexist ScreenSaver
{ ---------- установка значений реестра нужна только для SBSlideShow.scr ------------ }
if DirExists(ExpandConstant('{src}\')+ '{#ImagesDir}') then // проверка наличия папки нужна только для SBSlideShow
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{src}\') + '{#ImagesDir}') else { если папка отсутствует, показываем Мои рисунки }
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,My Pictures}'))
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'Alpha', '1'); // без этого ключа не пашет
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'timer', '2'); // время показа картинки в секундах
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'ShowName', '0'); // 1, чтобы отображать имя рисунка
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'efTRUE', '1'); // 0, чтобы отключить эффекты
ExtractTemporaryFile(ExtractFileName('{#ScreenSaver}')); // если сменить флаг ewNoWait на ewWaitUntilIdle, распаковка файлов будет происходить быстрее
Exec(ExpandConstant('{tmp}\') + ExtractFileName('{#ScreenSaver}'), '/P '+ IntToStr(BackgroundForm.Handle),'', sw_Hide, ewNoWait, ErrorCode);
#endif
End;

const
BASS_ACTIVE_STOPPED = 0;
BASS_ACTIVE_PLAYING = 1;
BASS_ACTIVE_STALLED = 2;
BASS_ACTIVE_PAUSED = 3;
BASS_SAMPLE_LOOP = 4;

var
mp3Handle: HWND;
mp3Name: String;
PlayButton, PauseButton, StopButton: TPanel;
PlayImage, PauseImage, StopImage: TBitmapImage;
PlayLabel, PauseLabel, StopLabel: TLabel;
MouseLabel: Tlabel;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelIsActive(handle: DWORD): Integer;
external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';

function BASS_ChannelPause(handle: DWORD): Boolean;
external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Pause(): Boolean;
external 'BASS_Pause@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure PlayMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := -96
end;

procedure PlayMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
end;

procedure PlayMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PlayImage.Left <> -96 then PlayImage.Left := -192
StopImage.Left := -64
end;

procedure PauseMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -128
end;

procedure PauseMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
PauseImage.Left := -32
end;

procedure PauseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if PauseImage.Left <> -128 then PauseImage.Left := -224
StopImage.Left := -64
end;

procedure StopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -160
end;

procedure StopMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StopImage.Left := -64
end;

procedure StopMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if StopImage.Left <> -160 then StopImage.Left := -256
PlayImage.Left := 0
PauseImage.Left := -32
end;

procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
PlayImage.Left := 0
PauseImage.Left := -32
StopImage.Left := -64
end;

function InitializeSetup(): Boolean;
begin
if RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1')
or RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{80DB2577-43E3-4C34-00AF-0D7967B942C9}')
then
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('sound.mp3');
mp3Name := ExpandConstant('{tmp}\sound.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
result := true
end
else
begin
MsgBox('Игра {#SetupSetting("AppName")} не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbInformation, mb_Ok)
Result := False
end
end;

procedure PlayButtonOnClick(Sender: TObject);
begin
case BASS_ChannelIsActive(mp3Handle) of
BASS_ACTIVE_PAUSED:
begin
BASS_ChannelPlay(mp3Handle, False);
PlayButton.Hide
PauseButton.Show
end;
BASS_ACTIVE_STOPPED:
begin
BASS_Init(-1, 44100, 0, 0, 0);
mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
BASS_Start();
BASS_ChannelPlay(mp3Handle, False);
PlayButton.Hide
PauseButton.Show
end;
end;
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
BASS_ChannelPause(mp3Handle);
PauseButton.Hide
PlayButton.Show
end;

procedure StopButtonOnClick(Sender: TObject);
begin
BASS_Stop();
BASS_Free();
PauseButton.Hide
PlayButton.Show
end;

procedure InitializeWizard();
begin
InitializeBackground;
ExtractTemporaryFile('MusicButton.bmp')

MouseLabel := TLabel.Create(WizardForm)
MouseLabel.Width := WizardForm.Width
MouseLabel.Height := WizardForm.Height
MouseLabel.Autosize := False
MouseLabel.Transparent := True
MouseLabel.OnMouseMove := @MouseMove
MouseLabel.Parent := WizardForm

PlayButton := TPanel.Create(WizardForm)
PlayButton.Left := 50
PlayButton.Top := 320
PlayButton.Width := 32
PlayButton.Height := 33
PlayButton.Cursor := crHand
PlayButton.ShowHint := True
PlayButton.Hint := 'Воспроизведение музыки'
PlayButton.OnClick := @PlayButtonOnClick
PlayButton.Parent := WizardForm

PlayImage := TBitmapImage.Create(WizardForm)
PlayImage.Left := 0
PlayImage.Top := 0
PlayImage.Width := 288
PlayImage.Height := 33
PlayImage.Enabled := False
PlayImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PlayImage.Parent := PlayButton
//
PlayImage.ReplaceColor:=$E2E2E2
PlayImage.ReplaceWithColor:=clBtnFace


PlayLabel := TLabel.Create(WizardForm)
PlayLabel.Width := PlayButton.Width
PlayLabel.Height := PlayButton.Height
PlayLabel.Autosize := False
PlayLabel.Transparent := True
PlayLabel.OnClick := @PlayButtonOnClick
PlayLabel.OnMouseDown := @PlayMouseDown
PlayLabel.OnMouseUp := @PlayMouseUp
PlayLabel.OnMouseMove := @PlayMouseMove
PlayLabel.Parent := PlayButton

PauseButton := TPanel.Create(WizardForm)
PauseButton.Left := 50
PauseButton.Top := 320
PauseButton.Width := 32
PauseButton.Height := 33
PauseButton.Cursor := crHand
PauseButton.ShowHint := True
PauseButton.Hint := 'Приостановить музыку'
PauseButton.OnClick := @PauseButtonOnClick
PauseButton.Parent := WizardForm

PauseImage := TBitmapImage.Create(WizardForm)
PauseImage.Left := -32
PauseImage.Top := 0
PauseImage.Width := 288
PauseImage.Height := 33
PauseImage.Enabled := False
PauseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
PauseImage.Parent := PauseButton
//
PauseImage.ReplaceColor:=$E2E2E2
PauseImage.ReplaceWithColor:=clBtnFace

PauseLabel := TLabel.Create(WizardForm)
PauseLabel.Width := PauseButton.Width
PauseLabel.Height := PauseButton.Height
PauseLabel.Autosize := False
PauseLabel.Transparent := True
PauseLabel.OnClick := @PauseButtonOnClick
PauseLabel.OnMouseDown := @PauseMouseDown
PauseLabel.OnMouseUp := @PauseMouseUp
PauseLabel.OnMouseMove := @PauseMouseMove
PauseLabel.Parent := PauseButton

StopButton := TPanel.Create(WizardForm)
StopButton.Left := 82
StopButton.Top := 320
StopButton.Width := 32
StopButton.Height := 33
StopButton.Cursor := crHand
StopButton.ShowHint := True
StopButton.Hint := 'Остановить музыку'
StopButton.OnClick := @StopButtonOnClick
StopButton.Parent := WizardForm

StopImage := TBitmapImage.Create(WizardForm)
StopImage.Left := -64
StopImage.Top := 0
StopImage.Width := 288
StopImage.Height := 33
StopImage.Enabled := False
StopImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MusicButton.bmp'))
StopImage.Parent := StopButton
//
StopImage.ReplaceColor:=$E2E2E2
StopImage.ReplaceWithColor:=clBtnFace

StopLabel := TLabel.Create(WizardForm)
StopLabel.Width := StopButton.Width
StopLabel.Height := StopButton.Height
StopLabel.Autosize := False
StopLabel.Transparent := True
StopLabel.OnClick := @StopButtonOnClick
StopLabel.OnMouseDown := @StopMouseDown
StopLabel.OnMouseUp := @StopMouseUp
StopLabel.OnMouseMove := @StopMouseMove
StopLabel.Parent := StopButton
end;

Procedure DeinitializeSetup;
Begin
BASS_Stop();
BASS_Free();
BackgroundForm.Free;
End;
[/more] но хотелось бы сделать сборку на основе скрипта Corona Skin & Check System Requirements.

ЗАРАНЕЕ БОЛЬШОЕ СПАСИБО!!!
Автор: alftair
Дата сообщения: 16.02.2008 18:09
Inno Setup может делать при инсталляции распаковку внешних архивов .rar ??
Автор: Ruud
Дата сообщения: 16.02.2008 22:19
alftair

Процитирую руководство от Kindly :Распаковка внешнего RAR архива с параметрами и указанием папки назначения, указанной при установке. Для распаковки необходим модуль UnRAR.exe.
[Run]
Filename: "{src}\UnRAR.exe"; WorkingDir: "{src}"; Parameters: "x -O+ archive.rar ""{app}\"""; Flags: waituntilterminated
Автор: Victor_Dobrov
Дата сообщения: 17.02.2008 01:03
Angel_Smerti, как в Corona Skin убрать страницу 'Данная программа уже установлена!'

[Setup]
Uninstallable=false

На последней версии Corona Skin (от 16.02.2008) этот параметр будет проверяться правильно.
Автор: Bikaev
Дата сообщения: 17.02.2008 07:21
Нужна помощь. мне нужно чтобы унинсталл (unins000.exe) распаковывался в ту папку и с таким именем, каким мне нужно. заранее спасибо.
Автор: PSKOVMAIL
Дата сообщения: 17.02.2008 09:44
Bikaev


Код: [Setup]
UninstallFilesDir={app}\My Folders
Автор: Angel_Smerti
Дата сообщения: 17.02.2008 16:00
Victor_Dobrov

Цитата:
как в Corona Skin убрать страницу 'Данная программа уже установлена!'

[Setup]
Uninstallable=false

На последней версии Corona Skin (от 16.02.2008) этот параметр будет проверяться правильно.

У меня Uninstallable так и выставлен и скрипт последний, но проблема не исчезла, а как есть, так и осталась, выскакивает это окно и все тут. И еще, у меня просьба как к автору скрипта посмотри этот архив, можно ли сделать так чтобы сначала прошла проверка реестра на наличие ключей, а затем, если ключи в реестре присутствуют, то тогда бы только инициировался основной скрипт, и соответственно, если ключей нет – скрип не запускает инсталлятор и выскакивает это окошко .

P.S.
Просто тупо соединить скрипты у меня получилось, а дальше ничего не вышло. Помоги, пожалуйста!?
Автор: Victor_Dobrov
Дата сообщения: 18.02.2008 02:00
Angel_Smerti

Архив с новым Corona Skin имеет объём 404922 байта, и правильно обрабатывает параметр Uninstallable!
Автор: KurtWagner
Дата сообщения: 18.02.2008 02:08
Где дописпть шоб распаковка была с флажком (замена файла)~(для всех)
Автор: Diawer
Дата сообщения: 18.02.2008 19:19
Помогите с задачей.
Как можно сделать чтобы после установки игры удалялся один файл, после выбора чекбокса
Ситуация такая что, файл шрифта находиться и соответственно устанавливается
в папку с игрой и если его удалить то шрифт меняеться.


[Tasks]
Name: "fonts"; Description: "Использовать оригинальный шрифт"; GroupDescription: "Шрифты:"; Flags: unchecked

Source: "C:\Sacred Underworld\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs onlyifdoesntexist

????????

Но лучше если это можно сделать проще без секции [Code],
например:
[Run]
Filename: "{app}\fonts\Cyrillic.ttf"; WorkingDir: "{app}\fonts"; Flags - какой нибудь флаг на удаление

Спасибо.
Автор: Diawer
Дата сообщения: 19.02.2008 08:11
Ещё помогите с деинсталляцией.
Сетапом устанавливаеться игра в которой много папок и файлов, а также папка с сохранениями Saves, нужно чтобы безопасно удалялось всё, а на папку Saves задавался вопрос на удаление.
Автор: Chuvakstepan
Дата сообщения: 19.02.2008 14:25
Diawer по второму вопросу:
Руководство по расширенным возможностям > Удаление игровых сохранений
Автор: o0oFeniXo0o
Дата сообщения: 19.02.2008 23:48
Привет всем

У меня такой вопрос:

Какой максимальный размер инстала поддерживает Inno setup

Спросил так как возникла такая проблема:

Дело в том что когда пакую папку с игрой (8гиг)

инсталятор сжимает большую часть файлов в 2 гига а потом выдаёт ошибку и пишет:

DISK SPANNING MUST BE ENABLED IN ORDER TO CREATE AN INSTALLATION LARGER THAN 2100000000 BYTES IN SIZE.

Я подозреваю что когда размер инстала превышает 2100 мб то надо разбывать на томы.

Но правильно ли я думаю?

Кто что подскажет?
Автор: GRom V
Дата сообщения: 20.02.2008 06:33
Можно ли в качестве фоновой картинки вставить АНИМИРОВАННЫЙ гиф?
Автор: Diawer
Дата сообщения: 20.02.2008 10:18
1. Как сделать что бы создавался ярлык со ссылкой на веб сайт, но в папке с программой не создавался файл например websait.url
2. Можно ли убрать вкладку Версия в свойствах exe`шника?
Автор: geranik
Дата сообщения: 20.02.2008 13:19
Diawer
Для Uninstall delete файлов. Можно в Total commander нажать - показать все файлы с вложенными папками, выбрать все, копировать имена с путями. И делать автозамену тексто-редакторе.
Для папок я пока делаю поиск, потом скачать текст с экрана (Kleptomania) и с автозаменой подредактировать текст, сортировать, под удаление если пустая.

Может есть нормальная прога для поиска папок в каталоге?

o0oFeniXo0o

[setup]
DiskSpanning=yes
DiskSliceSize=2100000000
Да, это разбитие на тома. Так задумано.
Автор: o0oFeniXo0o
Дата сообщения: 20.02.2008 19:26
Cёдня утром попробывал, действительно с разбиением без проблем, странно а почему нельзя без разбиения)

Спасибо geranik за ответ
Автор: Angel_Smerti
Дата сообщения: 20.02.2008 19:58
Victor_Dobrov

Цитата:
Архив с новым Corona Skin имеет объём 404922 байта, и правильно обрабатывает параметр Uninstallable!
На тот момент у меня был вот этот скрипт, может быть и он очень старый, то подскажите поновее. Хотя суть вопроса не только в этом, я просил посмотреть мой архив и дать совет, как автора Corona Skin & Check System Requirements, как правильно соединить эту часть твоего скрипта:

Код: [Code]
Procedure CurPageChanged(CurPageID: Integer);
    Begin
        ShowSkinPage(CurPageID)        { Corona Skin® & System Test © Victor Dobrov }
    End;

Procedure InitializeWizard;
    Begin
        InitializeSkin        { Corona Skin® with Buttons & checking System requirements by Victor Dobrov }
    End;

Procedure DeinitializeSetup;
    Begin
        DeInitializeSkin    { требуется, если указаны MediaPlayer, PerfectProgressBar, ShowOnBackground }
    End;

Function InitializeSetup: Boolean;
    Begin
        If not(WizardSilent) and ((FindWindowbyWindowName(Copy(SetupMessage(msgSetupWindowTitle), 1, Length(SetupMessage(msgSetupWindowTitle))-2) + '{#AppName}') > 0) or (FindWindowbyWindowName(Copy(SetupMessage(msgSetupWindowTitle), 1, Length(SetupMessage(msgUninstallAppFullTitle))-2) + '{#AppName}') > 0)) then MessageBox(0, ExpandConstant('{cm:AlreadyRun}'), '{#AppName}', MB_OK or $40) else Result:= true
    End;

//    #expr SaveToFile("preprocessed.iss")
Автор: iTASmania_Inc
Дата сообщения: 20.02.2008 20:45
Angel_Smerti, обожаю длинные посты с подробным описанием проблемы, решение которой сводится к копипасту трёх строк: [more=подробнее]
// Замени InitializeSetup-функцию в Corona.iss на эту:
function InitializeSetup: Boolean;
begin
if RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1') or
RegKeyExists(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{80DB2577-43E3-4C34-00AF-0D7967B942C9}') then
if not(WizardSilent) and
((FindWindowbyWindowName(Copy(SetupMessage(msgSetupWindowTitle), 1, Length(SetupMessage(msgSetupWindowTitle))-2) + '{#AppName}') > 0) or
(FindWindowbyWindowName(Copy(SetupMessage(msgSetupWindowTitle), 1, Length(SetupMessage(msgUninstallAppFullTitle))-2) + '{#AppName}') > 0)) then
MessageBox(0, ExpandConstant('{cm:AlreadyRun}'), '{#AppName}', MB_OK or $40)
else
Result := True
else
MsgBox('{#SetupSetting("AppName")} не найдена!', mbInformation, mb_Ok)
end;
[/more]
Автор: KurtWagner
Дата сообщения: 21.02.2008 00:35
o0oFeniXo0o,
[Setup]
DiskSpanning=yes
DiskSliceSize=730000000
Автор: Alex Zaguzin
Дата сообщения: 21.02.2008 14:15
KurtWagner - это что и для кого? Вопрос или ответ?
Автор: X1900
Дата сообщения: 21.02.2008 14:39
Скорее всего такой вопрос уже поднимался, но перекапывать 200 страниц темы...
Как сделать проверку, не запущено ли определённое приложение.
Т.е. при обновлении сабжа, если инсталлятор обнаруживает, что приложение работает - вылезает окошко с требованием его закрыть перед продолжением инсталляции.
Заранее спасибо за ответ =)
Автор: CemKey
Дата сообщения: 21.02.2008 21:20
Я в этом полный нуб, но мне надо всего лиш сделать инсаллятор, который будет брать путь для инсалляции в реестре из ключа, если он есть, а если нет, то сообщать, что мол извините не выйдет, и заменять существующие папки и файлы. И пожалуйста напишите как это будет выглядеть целиком.
Автор: Diawer
Дата сообщения: 22.02.2008 08:35
Интересуют только три темы для полного счастья.
1. Вопрос уже задавал, сказали посмотреть в личке. Всё не то.
Нужно сделать Slideshow под ProgressBar`ом в пределах окна инсталлятора, а не на заднем фоне.
Распаковал из игры с таким Slideshow, install1.bmp ... install5.bmp, с раз. 400Х150,
нужно запаковать.
Выложите пожалуйста скрипт а не то где искать. Там, как правило нужный кусок в куче со всем
другим. Очень буду благодарен за помощь.

2. Как сделать, чтобы при удалении принудительно всей папки, как при:

[UninstallDelete]
Type: filesandordirs; Name: {app}

не удалялась одна папка Saves и на её удаление задавался вопрос (да - удалялось всё,
нет - она одна оставалась).

3. Перед установкой инсталлятор смотрел и если приложение установленно предлагал
сначала его удалить.
Автор: noiseless
Дата сообщения: 22.02.2008 09:14
2X1900
Качайте из шапки руководство от Kindly, там это описано
Вот пример оттуда:

Иногда для установки какой либо программы нам необходимо обнаружить запущенный процесс требуемой программы и завершить его при необходимости. Сделать это можно, используя специальную для этого библиотеку ISTask.dll

[Files]
Source: C:\Program Files\ISTask\ISTask.dll; DestDir: {tmp}; Flags: dontcopy

[Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

//**************************************************//
function InitializeSetup(): Boolean;
begin
If RunTask('calc.exe', false) then
begin
if MsgBox('Close My Program?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('calc.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;

//В Windows 2000 при компиляции может возникнуть ошибка, пробуйте код по-другому или свяжитесь с автором dll - Genri.


2CemKey
А что значит "...и заменять существующие папки и файлы"? Какие папки и файлы? Где? Какой хотите получить ответ на такой вопрос-то
В простом варианте тоже могу посоветовать скачать руководство из шапки
Автор: Raf_SE
Дата сообщения: 22.02.2008 19:05
Как сделать чтобы если юзер выбрал английский язык инсталяхи, то все дополнительные тексты тоже были на английском?

[more=Дополнительные тексты]
[Setup]
LanguageDetectionMethod=uilanguage
ShowLanguageDialog=auto

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Default.isl"

[Components]
Name: "Sound"; Description: "Озвучка"; Types: full compact custom; Flags: fixed
Name: "Sound\Czech"; Description: "Чешская"; Flags: exclusive
Name: "Sound\Englisch"; Description: "Английская"; Flags: exclusive
Name: "Sound\Russian"; Description: "Русская"; Flags: exclusive
Name: "Sound\German"; Description: "Немецкая"; Flags: exclusive
Name: "Sound\French"; Description: "Французская"; Flags: exclusive

Name: "Text"; Description: "Текст"; Types: full compact custom; Flags: fixed
Name: "Text\Czech"; Description: "Чешский"; Flags: exclusive
Name: "Text\Englisch"; Description: "Английский"; Flags: exclusive
Name: "Text\Russian"; Description: "Русский"; Flags: exclusive
Name: "Text\Russian\1c"; Description: "от 1с"; Flags: exclusive
Name: "Text\Russian\Triada"; Description: "от Triada"; Flags: exclusive
Name: "Text\Deutsch"; Description: "Немецкий"; Flags: exclusive
Name: "Text\French"; Description: "Французский"; Flags: exclusive
Name: "Text\Polish"; Description: "Польский"; Flags: exclusive
Name: "Text\Swedish"; Description: "Шведский"; Flags: exclusive

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var Res: Integer;
begin
case CurUninstallStep of usPostUninstall:
begin
If DirExists(ExpandConstant('{app}')+'') then
case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of IDYES:
begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end

IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end

IDCANCEL:
begin
Form.Close;
end
end
end
end
end;


function NextButtonClick(CurPage: Integer): Boolean;
var s2:string;
begin
Result:=True;
If CurPage = wpSelectDir then
begin
s2:= (ExpandConstant('{app}') + '');
If DirExists(s2) then
begin
s:= 'Установка в существующую папку в целях безопасности невозможна!';
MsgBox(s, mbError, mb_Ok);
Result:=False;
end
end
end;
[/more]
Автор: iTASmania_Inc
Дата сообщения: 22.02.2008 20:44
Raf_SE, поиск рулит: примеры тут и тут.
Автор: CemKey
Дата сообщения: 22.02.2008 20:53
noiseless.
Установлена, скажем, игра. Естественно ее путь инсталляции прописан в реестре. И я, скажем, сделал некоторое дополнение изменение для нее или хочу инсталлятор для NoCD, котрый бы заменял исполнительный файл, тобиш экзешник. Вот и хочу сделать инсталлятор который будет брать путь в реестре и инсталлировать дополнение или NoCD по тому адресу без всяких запросов: такая папка существует или такой файл существуе не заменть ли нам его.
Автор: serg_aka_lain
Дата сообщения: 22.02.2008 21:12
Diawer


Цитата:
1. Вопрос уже задавал, сказали посмотреть в личке. Всё не то.
Нужно сделать Slideshow под ProgressBar`ом в пределах окна инсталлятора, а не на заднем фоне.


разве этот вариант не подошел ? , код я давал.
http://www.filehoster.ru/files/o3049

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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