Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
Dodakaedr
06-02-2017, 10:05
Как найти папки по части их имени? Известно только в какой папке искать и начало имени папок, все папки начинаются с нумерации от 001.
Не получается применить FindFirst.
akiraii@vk
09-02-2017, 15:03
Подскажите, собственно во время установки требуется что бы инсталятор вывел окно для ввода данных, конкретно цифр, пользователь вводит эти цифры и далее эти цифры используются в качестве параметра для приложений в секции [run], такое возможно?
akiraii@vk
09-02-2017, 16:23
Всё нашел сам. Отбой.
akiraii@vk
10-02-2017, 02:50
[setup]
AppName=ChangeDomain
AppVerName=0.1
DefaultDirName=c:\
OutputDir=c:\
[code ]
var
AuthPage : TInputQueryWizardPage;
procedure InitializeWizard;
begin
AuthPage := CreateInputQueryPage(wpWelcome,
'Account Information', 'Please enter your Account Information', '');
AuthPage.Add('Username:', False);
AuthPage.Add('Password:', False);
end;
function AuthForm_NextButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;
function GetUserName(Param: String): string;
begin
result := AuthPage.Values[0];
end;
function GetPassword(Param: String): string;
begin
result := AuthPage.Values[1];
end;
[Run]
Filename: "{syswow64}\wbem\WMIC.exe"; Parameters: "ComputerSystem where Name='%COMPUTERNAME%' call Rename Name='{code:GetUsername}'"
Filename: "{syswow64}\wbem\WMIC.exe"; Parameters: "ComputerSystem where Name='%COMPUTERNAME%' call JoinDomainOrWorkgroup Name='{code:GetPassword}'"
не запускает wmic, куда копать?
akiraii@vk
10-02-2017, 04:07
[setup]
AppName=ChangeDomain
AppVerName=0.1
DefaultDirName=c:\
OutputDir=c:\
[code]
var
AuthPage : TInputQueryWizardPage;
procedure InitializeWizard;
begin
AuthPage := CreateInputQueryPage(wpWelcome,
'Account Information', 'Please enter your Account Information', '');
AuthPage.Add('Username:', False);
AuthPage.Add('Password:', False);
end;
function AuthForm_NextButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;
function GetUserName(Param: String): string;
begin
result := AuthPage.Values[0];
end;
function GetPassword(Param: String): string;
begin
result := AuthPage.Values[1];
end;
function CreateBatch(): boolean;
var
fileName : string;
lines : TArrayOfString;
begin
Result := true;
fileName := ExpandConstant('{sd}\'+AuthPage.Values[0]+AuthPage.Values[1]+'.bat');
SetArrayLength(lines, 2);
lines[0] := 'wmic ComputerSystem where Name="%COMPUTERNAME%" call Rename Name="'+AuthPage.Values[0]+'"';
lines[1] := 'wmic ComputerSystem where Name="%COMPUTERNAME%" call JoinDomainOrWorkgroup Name="'+AuthPage.Values[1]+'"';
Result := SaveStringsToFile(filename,lines,true);
exit;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssPostInstall then
begin
CreateBatch();
end
end;
[Run]
Filename: "c:\{code:GetUsername}{code:GetPassword}.bat"; Flags: shellexec
пошёл другим путём, тут не запускает в конце созданный батник, если добавить postinstall, то запускает но с чекбоксом
El Sanchez
13-02-2017, 15:40
не запускает wmic, куда копать? »
Смотреть в логе ResultCode, попробовать в Parameters сменить каждую одинарную кавычку на 2 двойные.
пошёл другим путём, тут не запускает в конце созданный батник, если добавить postinstall, то запускает но с чекбоксом »
Если GetPassword -> AuthPage.Values[1] -> пользователь ввел недопустимые для путей символы, то файла c:\{code:GetUsername}{code:GetPassword}.bat не видать.
NeoBlack1,
#define MyAppName "Barnet POS"
#define MyAppVersion "1.6"
#define MyAppPublisher "Barnet POS, inc"
#define MyAppURL "http://barnetbc.ru"
#define MyAppExeName "BarnetManager.exe"
#define SQLSERVERNAME "localhost\SQLEXPRESS"
#define SQLDATABASENAME "barnet"
[Setup]
AppId={{84A2C789-E6B0-4F26-832A-07D3A8AD0316}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
[Files]
// Source: "C:\BarnetPOSScript\SourceProgram\BarnetManager.exe"; DestDir: "{app}"; Flags: ignoreversion;
// Source: "C:\BarnetPOSScript\SourceProgram\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
[Code]
var
Page, Page1, Page2: TWizardPage;
Button, Button2, FormButton: TNewButton;
Edit2, strServerName, strDabaseName : TNewEdit;
PasswordEdit: TPasswordEdit;
StaticText, StaticText1, StaticText2, StaticText3, StaticText4: TNewStaticText;
CheckListBox2: TNewCheckListBox;
InputPage: TInputFileWizardPage;
function IsChecked(const Index: Integer): Boolean;
begin
Result:= CheckListBox2.Checked[Index]
end;
function CheckAlias(): Boolean;
var
ADOConnection: Variant;
begin
Result := false;
try
ADOConnection := CreateOleObject('ADODB.Connection');
ADOConnection.ConnectionString := 'Provider=SQLOLEDB;Data Source={#SQLSERVERNAME};Initial Catalog={#SQLDATABASENAME};User Id=sa;Password=123456;'
ADOConnection.Open;
try
Result := true;
finally
ADOConnection.Close;
end;
except
Result := false;
end;
end;
procedure ButtonOnClick(Sender: TObject);
begin
CheckAlias();
MsgBox('Соединение установлено', mbInformation, mb_Ok);
end;
procedure ButtonOnClick2(Sender: TObject);
begin
MsgBox('You clicked the button!!!!!', mbInformation, mb_Ok);
end;
procedure FormButtonOnClick(Sender: TObject);
var
OKButton: TNewButton;
OKButton2: TNewButton;
Form: TSetupForm;
begin
Form := CreateCustomForm();
try
OKButton := TNewButton.Create(Form);
OKButton.Parent := Form;
OKButton.Width := ScaleX(75);
OKButton.Height := ScaleY(23);
OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
OKButton.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton.Caption := 'OK';
OKButton.ModalResult := mrOk;
OKButton.Default := True;
OKButton2 := TNewButton.Create(Form);
OKButton2.Parent := Form;
OKButton2.Width := ScaleX(75);
OKButton2.Height := ScaleY(23);
OKButton2.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
OKButton2.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton2.Caption := 'OK';
OKButton2.ModalResult := mrOk;
OKButton2.Default := True;
finally
Form.Free();
end;
end;
// Страницы инсталлятора!
procedure InitializeWizard();
begin
// 1-я страница (Выбор Установки)!
Page := CreateCustomPage(wpWelcome, 'Тип Установки', 'TNewCheckListBox');
CheckListBox2 := TNewCheckListBox.Create(Page);
CheckListBox2.Top := ScaleY(8);
CheckListBox2.Width := Page.SurfaceWidth;
CheckListBox2.Height := ScaleY(97);
CheckListBox2.BorderStyle := bsNone;
CheckListBox2.ParentColor := True;
CheckListBox2.MinItemHeight := WizardForm.TasksList.MinItemHeight;
CheckListBox2.ShowLines := False;
CheckListBox2.WantTabs := True;
CheckListBox2.Parent := Page.Surface;
CheckListBox2.AddGroup('Выберите тип установки', '', 0, nil);
CheckListBox2.AddRadioButton('Установить файлы', '', 0, True, True, nil);
CheckListBox2.AddRadioButton('Установить файлы + создать новую базу данных', '', 0, False, True, nil);
// 2-я страница (Создание БАЗЫ ДАННЫХ)!
Page1 := CreateCustomPage(Page.ID, 'Создание новой базы данных', 'Сервер и Наименование');
StaticText := TNewStaticText.Create(Page1);
StaticText.Parent := Page1.Surface;
StaticText.Caption := 'Наименование сервера';
StaticText.AutoSize := True;
strServerName := TNewEdit.Create(Page1);
strServerName.Top := StaticText.Top + StaticText.Height + ScaleY(2);
strServerName.Width := Page1.SurfaceWidth div 2 - ScaleX(8);
strServerName.Text := '{#SQLSERVERNAME}';
strServerName.Parent := Page1.Surface;
StaticText1 := TNewStaticText.Create(Page1);
StaticText1.Parent := Page1.Surface;
StaticText1.Top := strServerName.Top + strServerName.Height + ScaleY(8);
StaticText1.Caption := 'Укажите имя базы данных';
StaticText1.AutoSize := True;
strDabaseName := TNewEdit.Create(Page1);
strDabaseName.Top := StaticText1.Top + StaticText1.Height + ScaleY(8);
strDabaseName.Width := Page1.SurfaceWidth div 2 - ScaleX(8);
strDabaseName.Text := '{#SQLDATABASENAME}';
strDabaseName.Parent := Page1.Surface;
Button := TNewButton.Create(Page1);
Button.Width := ScaleX(150);
Button.Height := ScaleY(23);
Button.Top := strDabaseName.Top + strDabaseName.Height + ScaleY(8);
Button.Caption := 'Проверить соединение';
Button.OnClick := @ButtonOnClick;
Button.Parent := Page1.Surface;
// 3-я страница (Загрузка бэкапа)!
InputPage := CreateInputFilePage(Page1.ID, 'Создание новой базы данных', 'Загрузка шаблона базы данных',
'Выберите файл');
InputPage.Add('Расширение файла .bak', 'BAK files (*.bak)|*.bak', '.bak');
Button2 := TNewButton.Create(InputPage);
Button2.Width := ScaleX(90);
Button2.Height := ScaleY(23);
Button2.Left := ScaleX(10);
Button2.Top := ScaleY(80);
Button2.Caption := 'Загрузить';
Button2.OnClick := @ButtonOnClick2;
Button2.Parent := InputPage.Surface;
//InputPage.Values[0] := GetPreviousData('Расширение файла .bak', ExpandConstant('{sysuserinfoname}'));
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if IsChecked(0) then
if (PageID = Page1.id) or(PageID = InputPage.ID) then Result := False
if IsChecked(1) then
if (PageID = Page1.id) or(PageID = InputPage.ID) then Result := True;
end;
El Sanchez
16-02-2017, 09:50
Из PM:
чтобы пользователь находясь на странице Page1 (Создание БД), не мог нажать "Далее", пока не нажмет на кнопку "Проверить соединение", а уже после этого была возможность нажать "Далее"?
NeoBlack1, лимит PM превышен, поэтому сюда:
const
adStateOpen = 1;
function CheckAlias(): Boolean;
var
ADOConnection: Variant;
begin
Result := False;
try
ADOConnection := CreateOleObject('ADODB.Connection');
ADOConnection.ConnectionString := 'Provider=SQLOLEDB;Data Source={#SQLSERVERNAME};Initial Catalog={#SQLDATABASENAME};User Id=sa;Password=123456;'
ADOConnection.Open;
except
MsgBox(GetExceptionMessage, mbCriticalError, MB_OK);
finally
Result := (ADOConnection.State = adStateOpen);
if Result then
ADOConnection.Close;
end;
end;
procedure ButtonOnClick(Sender: TObject);
begin
WizardForm.NextButton.Enabled := CheckAlias();
if WizardForm.NextButton.Enabled then
MsgBox('Соединение установлено', mbInformation, mb_Ok);
end;
procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
Page1.ID:
WizardForm.NextButton.Enabled := False;
end;
end;
vadjliss
17-02-2017, 18:46
ребята подскажите как сделать чтобы перед инсталляцией программы запускалась программа Microsoft Visual C++
vadjliss, с этого места поподробнее, пожалуйста. Что за программа, и почему ей не хватает установленных библиотек C++ неизвестно какой версии, что приходится запускать Microsoft Visual C++ » опять же неизвестно какой версии (начиная с 2005 и кончая версией 2017).
чтобы перед инсталляцией программы запускалась программа Microsoft Visual C++ »
[Files]
Source: MyProg.exe; DestDir: {app}; Flags: ignoreversion
Source: vc_redist.x86.exe; DestDir: {tmp}; Flags: deleteafterinstall
[Run]
Filename: {tmp}\vc_redist.x86.exe; Parameters: /quiet; Flags: waituntilterminated
Filename: {app}\MyProg.exe; WorkingDir: {app}
Если я правильно понял.
привет подскажите - что нужно прописать, чтобы при выборе папки с названием игры, не было двойной папки - например с\игра\игра - короче как в русификаторах например или в ехе архиве при любом выборе не появляется в конце название игры
и ещё вопросик - как сделать чтобы не создавался деинсталятор и в удалении программ не появлялось - короче, чтобы не создавалось следов в системе
pist0n, [Setup]: Uninstallable
Возможные значения:
yes или no, или логические выражения
Значение по умолчанию:
yes
Описание:
Inno Setup определяет, создавать ли автоматический деинсталлятор. При значении yes или логического выражения True он создается. Иначе автоматическое удаление будет невозможно, так что пользователь должен будет вручную удалять программу.
Установка значения директивы в True может быть полезной, если Вы хотите установить 'переносимую' программу.
Например:
[Setup]
Uninstallable=not IsTaskSelected('portablemode')
[Tasks]
Name: portablemode; Описание: "Portable Mode"
[Setup]: CreateUninstallRegKey
Возможные значения:
yes или no, или логическое выражение
Значение по умолчанию:
yes
Описание:
При значении no или False (логические выражения) инсталлятор не будет создавать пункта программы в диалоге Установка и удаление программ. Это может быть полезно, если программа является обновлением для уже установленного приложения и запись в этом диалоге не нужна, но надо сохранить возможность удаления обновления (Uninstallable=no). В этом случае, UpdateUninstallLogAppName обычно устанавливается в no.
По первому вопросу: по умолчанию дублирующая папка не создаётся. Что-то видимо в коде "накодил".
По первому вопросу: по умолчанию дублирующая папка не создаётся. Что-то видимо в коде "накодил". »
мб я не так объяснил - мне для русика - дублирующая папка не создаётся сама - она появляется, если выбрать место установки в эту же папку с игрой - например мне нужно установить русик в D:\SteamLibrary\steamapps\common\Mini Ninjas - я выбираю папку Mini Ninjas и получается D:\SteamLibrary\steamapps\common\Mini Ninjas\Mini Ninjas
http://i.imgur.com/hNvIIys.jpg.
как сделать, чтобы вторая папка не появлялась?
вот так у меня
[Setup]
AppName= Русификатор Mini Ninjas
AppVerName=Русификатор Mini Ninjas
DefaultDirName={pf}\Steam\steamapps\common\Mini Ninjas
pist0n,
А как выглядит секция [Files] с файлами?
pist0n,
А как выглядит секция [Files] с файлами? »
[Files]
Source: logo.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
#if precomp == "0.38"
; Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.4"
; Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.41"
; Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.42"
; Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#else
; Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
; Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
; Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
; Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif
pist0n, [Setup]: AppendDefaultDirName
Возможные значения:
yes или no
Значение по умолчанию:
yes
Описание:
По умолчанию при указании пути на странице Выбор папки назначения с помощью кнопки Обзор... (Browse...) инсталлятор автоматически добавляет в конце имя папки, указанной в директиве DefaultDirName, в которую будет установлена программа. Например, если DefaultDirName={pf}\My Program и пользователь выбрал в обзоре диск "Z:\", то программа установится в "Z:\My Program".
Если значение директивы no, то папка с указанным DefaultDirName именем в конечном каталоге создаваться не будет. На странице выбора появится кнопка "Создать папку" (Make New Folder).
pist0n,
[Setup]
DefaultDirName={pf}\Steam\steamapps\common\Mini Ninjas
Покажите файлы которые устанавливаются в данную папку.
[Setup]: AppendDefaultDirName »
спасибо помогло - сделал так
[Setup]
AppendDefaultDirName=False
.
и последний вопросик - как в конце установки удалить нужную папку или файл?
UPD. а всё нашёл
[InstallDelete]
Type: files; Name: "{app}\файл";
Type: filesandordirs; Name: "{app}\папка";
pist0n, UPD. а всё нашёл
Секция [InstallDelete] обрабатывается компилятором в первую очередь, еще до того как установились какие либо файлы или папки.
По сути секция [InstallDelete] служит для удаления файлов и папок предыдущей установленной версии, но ни как не файлов и папок из версии что устанавливаешь.
Порядок установки
Задания в секциях от начала до завершения установки выполняются в следующем порядке:
•Выполняется [InstallDelete].
•Параметры секции [UninstallDelete] располагаются в логе деинсталлятора (который на этом этапе находится в оперативной памяти).
•При необходимости создается папка приложения.
•Выполняется [Dirs].
•При необходимости резервируется имя файла деинсталлятора.
•Выполняется [Files]. (Регистрация файлов не происходит.)
•Выполняется [Icons].
•Выполняется [INI].
•Выполняется [Registry].
•Регистрируются файлы, нуждающиеся в регистрации, если только не требуется перезагрузка системы - в этом случае ни один файл не будет зарегистрирован до тех пор, пока система не перезапустится.
•При необходимости создается пункт в Установка/Удаление программ.
•Параметры [UninstallRun] располагаются в логе деинсталлятора.
•Завершается создание деинсталлятора и сохраняется на диске. После этого, пользователю не сможет отменить установку, и любые последующие ошибки не будут вызывать то откат всех действий.
•Выполняется [Run], за исключением файлов с флагом postinstall, которые выполнятся после того, как отобразится страница Установка завершена.
•При ChangesAssociations=yes меняются ассоциации для файлов.
•Если ChangesEnvironment=yes остальные приложения информируются об изменении переменных среды.
Все параметры выполняются инсталлятором в том порядке, в котором они располагаются в секции.
Все изменения отменяются деинсталлятором в порядке, обратном их созданию инсталлятором. Это происходит потому, что лог деинсталлятора выполняется от конца к началу.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.