Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
Dodakaedr
02-08-2015, 22:24
vadjliss, Сделайте вот так и все поймете.
[Files]
Source: "ваша папка портабл\*"; DestDir: "{app}"; Check: "not IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
Source: "ваша папка не портабл\*"; DestDir: "{app}"; Check: "IsChecked"; Flags: ignoreversion createallsubdirs recursesubdirs
И как понять?
короче надо что бы portable не трогала папку инстолятора »
что за папка инсталлятора?
vadjliss
03-08-2015, 05:58
спасибо всё как надо
vadjliss
03-08-2015, 07:57
да и ещё не могу понять как поменять иконки на свой
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
Uninstallable=IsChecked
CreateUninstallRegKey=IsChecked
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl;
[Tasks]
; Дополнительно
; Ярлык(и) на «Рабочем столе»
Name: "desktopicon"; Description: "Ярлык(и) на «Рабочем столе»"; GroupDescription: "Дополнительно:"; Check: IsChecked
; Ярлыки в меню «Пуск»
Name: "starticon"; Description: "Ярлыки в меню «Пуск»"; GroupDescription: "Дополнительно:"; Check: IsChecked
[Icons]
Name: "{group}\My Program"; Filename: "{uninstallexe}"; Tasks: starticon; Check: not IsChecked
Name: "{commondesktop}\My Program"; Filename: "{uninstallexe}"; Tasks: desktopicon; Check: IsChecked
[Files]
; Файлы для проверки и демонстрации. При реальном использовании - закомментировать или удалить!
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs
[CustomMessages]
HeaderLabelPage=Выбор типа установки
LabelPage=Выберите нужный тип установки
MyRadioCaption_1=Распаковка
MyRadioCaption_2=Обычная установка
PageTextHeader=На этой странице Вы можете выбрать тип установки, который для Вас наиболее удобен.
MyText_1=Будет произведена распаковка в паку,%nуказанную на следующей странице
MyText_2=Будет произведена стандартная установка
Extracted=Распаковка — %1
ExtractedFolder=Выбор папки распаковки
ExtractedFolder2=В какую папку вы хотите распаковать %1?
ExtractedFolder3=Программа распакует %1 в следующую папку.
ExtractedFolder4=Программа установит %1 в следующую папку.
Installing=Распаковка...
InstallingLabel=Пожалуйста, подождите, пока %1 распакуется на ваш компьютер.
FinishedHeadingLabel=Завершение распаковки%n%1
FinishedLabelNoIcons=Программа %1 распакована на Ваш компьютер.%n%nНажмите «Завершить», чтобы выйти из программы распаковки.
[UninstallDelete]
Type: filesandordirs; Name: {app}
[code]
const
DI_NORMAL = 3;
var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;
function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: AnsiString; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt;external 'DrawIconEx@user32.dll stdcall';
function DestroyIcon(hIcon: LongInt): LongInt; external 'DestroyIcon@user32.dll stdcall';
function IsChecked: Boolean;
begin
Result:= MyRadioBtn_2.checked;
end;
procedure RadBtnOnClick(Sender: TObject);
begin
case Sender of
MyRadioBtn_1: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
MyRadioBtn_2: begin
WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder4}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
procedure GetInstTypePage();
begin
MyNewPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:HeaderLabelPage}'), ExpandConstant('{cm:LabelPage}'));
try
// в конкретном примере из этого файла (C:\Windows\System32\shell32.dll) берём иконки, для пробного показа.
// Можно использовать обычные .ico
AIconFileName:= ExpandConstant('{sys}\shell32.dll');
//
Rect.Left:= 0;
Rect.Top:= 0;
Rect.Right:= 32;
Rect.Bottom:= 32;
hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 26);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(68);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;
hIcon:= ExtractIcon(GetModuleHandle(0), AIconFileName, 19);
try
with TBitmapImage.Create(WizardForm) do begin
Left:= ScaleX(15);
Top:= ScaleY(138);
Width:= 32;
Height:= 32;
with Bitmap do begin
Width:= 32;
Height:= 32;
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, DI_NORMAL);
end;
Parent:= MyNewPage.Surface;
end;
finally
DestroyIcon(hIcon);
end;
except
end;
with TNewStaticText.Create(WizardForm) do begin
Width:= WizardForm.InnerNotebook.Width;
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:PageTextHeader}');
Parent:= MyNewPage.Surface;
end;
MyRadioBtn_1:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do begin
Top:= ScaleY(50);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_1}');
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;
with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(68);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_1}');
Parent:= MyNewPage.Surface;
end;
MyRadioBtn_2:= TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do begin
Top:= ScaleY(120);
Width:= ScaleX(150);
Caption:= ExpandConstant('{cm:MyRadioCaption_2}');
Checked:= True;
OnClick:= @RadBtnOnClick;
Parent:= MyNewPage.Surface;
end;
with TNewStaticText.Create(WizardForm) do begin
Left:= ScaleX(60);
Top:= ScaleY(138);
Width:= WizardForm.InnerNotebook.Width - ScaleX(60);
Height:= ScaleY(26);
WordWrap:= True;
Caption:= ExpandConstant('{cm:MyText_2}');
Parent:= MyNewPage.Surface;
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID > wpSelectDir) and (PageID < wpInstalling) and (MyRadioBtn_1.Checked) then
Result:= True;
end;
procedure InitializeWizard();
begin
GetInstTypePage();
WizardForm.DiskSpaceLabel.Hide;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if not IsChecked then begin
case CurPageID of
wpSelectDir: begin
WizardForm.Caption:= FmtMessage(ExpandConstant('{cm:Extracted}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:ExtractedFolder}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder2}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('{cm:ExtractedFolder3}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
if IsChecked then
WizardForm.DirEdit.Text := ExpandConstant( '{pf}\{#SetupSetting("AppName")}' ) else
WizardForm.DirEdit.Text := ExpandConstant( '{src}\{#SetupSetting("AppName")}' );
end;
wpInstalling: begin
WizardForm.PageNameLabel.Caption:= ExpandConstant('{cm:Installing}');
WizardForm.PageDescriptionLabel.Caption:= FmtMessage(ExpandConstant('{cm:InstallingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
wpFinished: begin
WizardForm.FinishedHeadingLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedHeadingLabel}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
WizardForm.FinishedLabel.Caption:= FmtMessage(ExpandConstant('{cm:FinishedLabelNoIcons}'), [ExpandConstant('{#SetupSetting("AppName")}')]);
end;
end;
end;
end;
vadjliss, Пробуйте
http://rghost.ru/7VmP5Z6Yk
пожалуйста подскажите как реализовать на странице выбора папки - выбор дисков
имеется в виду чтобы выбор был ТОЛЬКО корень дисков доступных в системе
habib2302
05-08-2015, 15:38
Доброе время суток. Возможно ли задать кодировку создаваемого ini файла например на utf-8
как исправить инсталятор создаётся не там где надо »В [Setup]:
OutputDir=Папка инсталлятора
если хотите рядом со скриптом, то:
OutputDir=.
vadjliss
05-08-2015, 18:45
извиняюсь я не правильно выразился
при распаковки создаётся 2 исполняемых файла один надо убрать как это можно сделать
вот скрин
http://piccash.net/allimage/2015/8-5/img_thumb/463111-thumb.png (http://piccash.net/27967/463111/)
#define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "Amakrits.vsf"
[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
UninstallFilesDir={app}\Новая папка\Новая папка
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"; Tasks: desktopicon
Здесь:
[Files]
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\*; DestDir: """{app}"
удалите это:
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe; DestDir: {app}; Flags: ignoreversion
vadjliss
05-08-2015, 20:29
спасибо Nordek
а, я голову сломал
vadjliss, Зачем удаляете сообщения? На заметку: Такое действие считается дурным тоном.
Если при вопросе получилось описать не совсем то что имели ввиду, то: могли предыдущее сообщение оставить как есть, а следующим сообщением уточнить.
vadjliss
06-08-2015, 06:24
ещё один вопрос
вот скрин
http://piccash.net/allimage/2015/8-6/img_thumb/463452-thumb.png (http://piccash.net/27967/463452/)
vadjliss, В [Setup] добавьте VersionInfoDescription.
Пример:
VersionInfoDescription=Описание
vadjliss
06-08-2015, 07:50
спасибо как всегда оперативно Nordek
нашёл вот этот скрипт
#define MainExe "{app}\Bin32\crysis.exe"
#define MainExe64 "{app}\Bin64\crysis.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)
[Icons]
Name: "{group}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Check: IsWin64
Name: "{group}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Check: not IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64
Name: "{group}\Удалить программу"; FileName: "{uninstallexe}"; IconFileName: "{sys}\shell32.dll"; IconIndex: 32
я так понял это чтобы устанавливалось на x32_x64
как его правильно вмонтировать сюда
#define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "BlurayConverterUltimate.exe"
[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
VersionInfoDescription=BlurayConverterUltimate
;UninstallFilesDir={app}\Новая папка\Новая папка
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
;Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\Новая папка\Новая папка\BlurayConverterUltimate.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Dilan\Desktop\Output\Новая папка (2)\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"
Name: "{commondesktop}\My Program"; Filename: "{app}\Новая папка\Новая папка\BlurayConverterUltimate.exe"; Tasks: desktopicon
и как полностью удалить group
vadjliss, Пример: #define MyAppName "My Program"
#define MyAppVersion "1.2.8"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "{app}\Blu-ray Converter Ultimate\BlurayConverterUltimate.exe"
#define MyAppExeName64 "{app}\Blu-ray Converter Ultimate\BlurayConverterUltimate.exe"
#define MyAppExeNameDir Copy(MyAppExeName, 1, RPos("\", MyAppExeName)-1)
#define MyAppExeName64Dir Copy(MyAppExeName64, 1, RPos("\", MyAppExeName64)-1)
[Setup]
AppId={{A5209214-FFB5-45F0-A529-5BA87A16C566}
AppName={#MyAppName}
AppVersion=1.2.8
AppVerName=1.2.8
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\Users\Dilan\Desktop\Output
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
VersionInfoDescription=BlurayConverterUltimate
;UninstallFilesDir={app}\Новая папка\Новая папка
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
[Files]
Source: C:\Users\Dilan\Desktop\Output\BlurayConverterUltimate32.exe; DestDir: {app}\Blu-ray Converter Ultimate; DestName: BlurayConverterUltimate.exe; Flags: ignoreversion; Check: not IsWin64
Source: C:\Users\Dilan\Desktop\Output\BlurayConverterUltimate64.exe; DestDir: {app}\Blu-ray Converter Ultimate; DestName: BlurayConverterUltimate.exe; Flags: ignoreversion; Check: IsWin64
Source: C:\Users\Dilan\Desktop\Output\Новая папка (2)\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: {group}\{#MyAppName}; FileName: {#MyAppExeName}; WorkingDir: {#MyAppExeNameDir}; Check: not IsWin64
Name: {group}\{#MyAppName}; FileName: {#MyAppExeName64}; WorkingDir: {#MyAppExeName64Dir}; Check: IsWin64
Name: {userdesktop}\{#MyAppName}; FileName: {#MyAppExeName}; WorkingDir: {#MyAppExeNameDir}; Tasks: desktopicon; Check: not IsWin64
Name: {userdesktop}\{#MyAppName}; FileName: {#MyAppExeName64}; WorkingDir: {#MyAppExeName64Dir}; Tasks: desktopicon; Check: IsWin64
Name: {group}\Удалить программу; FileName: {uninstallexe}; IconFileName: {sys}\shell32.dll; IconIndex: 32
неужели никто не знает как реализовать на странице выбора папки - выбор дисков
имеется в виду чтобы выбор был ТОЛЬКО корень дисков доступных в системе »
скрипт для инсталлятора готов скомпилирован и работает, но на странице выбора места инсталляции есть возможность установить приложение в произвольные папки
а хотелось бы устанавливать приложение только в корень любого диска (включая съёмные носители)
на форуме и не только на этом нашёл много полезного, но не то что нужно,а вот квалификации написать скрипт самому не хватает
требуется квалифицированная помощь :help:
пожалуйста подскажите как реализовать на странице выбора папки - выбор дисков »
#1311 (http://forum.oszone.net/post-2025278-1311.html)
vadjliss
07-08-2015, 07:23
если такой
http://piccash.net/allimage/2015/8-7/img_thumb/463880-thumb.png (http://piccash.net/27967/463880/)
var
DirTreeView: TFolderTreeView;
procedure DirFolderChange(Sender: TObject);
Begin
WizardForm.DirEdit.Text:=AddBackslash(DirTreeView.Directory) + 'MyProg'
end;
Procedure InitializeWizard1;
begin
DirTreeView:= TFolderTreeView.Create(WizardForm)
DirTreeView.SetBounds(0,100,417,110)
DirTreeView.OnChange:= @DirFolderChange
DirTreeView.Parent:= WizardForm.SelectDirPage
// DirTreeView.ChangeDirectory(ExpandConstant('{pf}'), True)
end;
procedure InitializeWizard();
begin
InitializeWizard1;
end;
Nordek, vadjliss, спасибо - буду пробовать
vadjliss, нет это не то, мне необходимо без возможности выбора папок
Nordek, в примерах по ссылкам ошибки компиляции, но зато я знаю чего искать в файлах примеров
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.