Написание скрипта для инсталлятора

  • Автор темы Kindly
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

Kindly

Ндя, жмот чел оказался... GuEst сенкс, будем разбираться.
 
T

t-tan

To Expeditor!
Если не трудно вышлите мне на мыло ту софтину, которую вы написали для того, чтобы конвертировать нормальные файлы в пустые. А то, очень нужна. t-tan@list.ru
P.S: Извиняюсь, что так поздно прошу.
 
T

t-tan

To Expeditor!
Если не трудно вышлите мне на мыло ту софтину, которую вы написали для того, чтобы конвертировать нормальные файлы в пустые. А то, очень нужна. t-tan@list.ru
P.S: Извиняюсь, что так поздно прошу.
 
G

Guest_mike_*

извиняюсь, что с таким ламерским вопросом лезу, но нужна помощь.
с программой начал работать только сегодня и не программист, так что многое непонятно.
Вопрос в следующем: как удалить существующие файлы? ниже распишу подробнее.
Задача была такая: есть старая версия установленной программы. там была такая часть: Папка\Имя файла.
В новой версии структура этой части немного другая: Папка\Папка2\Имя файла
При установке инсталлятор проверяет наличие старой версии и конкретно наличие данного файла. если он есть, то переписывает его под свою структуру. Это я сделал.
Но у меня остается старая структура: Папка\Имя файла. Т.е. файл (Имя файла) дублируется, а у меня не получается его удалить.
В хелпе нашел функции DeleteFile и DelTree, но я наверно как-то их не правильно использую - ничего не получается, при компиляци обычно выдает ошибку. Подскажите плиз.
 
G

Guest

Попробуй скачать отсюда руководство, вверху топика: link removed
Там в принципе встречается пример удаления.
 
M

Mesmerized

Кто знает, как изменить этот IS Uninstaller, чтобы он удалял не все файлы, а только папку Save?

unit Uninstaller;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellApi, XPMan;

type
TForm1 = class(TForm)
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1:TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
lpFileOp: TSHFileOpStruct;
DirList:TStringList;
FileList:TStringList;
sr: tSearchRec;
i,j:integer;
Path: string;
begin
MessageBeep(MB_ICONASTERISK);
with Application do
begin
DirList:= TStringList.Create;
FileList:= TStringList.Create;
if findFirst('*.*',faAnyFile,sr)=0 then
repeat
if (sr.Name <> '..') and (sr.Name <> '.') then
begin
if sr.attr=faDirectory then DirList.Add(sr.Name)
else FileList.Add(sr.Name);
end;
until findNext(sr) <> 0;
FindClose(sr);
If MessageBox('Нажмите «Да», если вы хотите удалить все файлы из папки игры (в том числе и сохранения игры), или нажмите «Нет», если хотите оставить файлы, которые не были установлены вместе с игрой.' + #13#10#13#10 + 'Вы хотите удалить все файлы из папки игры?', 'Подтвердите удаление файлов',MB_ICONQUESTION or MB_YesNo) = IDYes then
begin
for i:=0 to FileList.Count-1 do
begin
if FileList.Strings<>'IsUninstaller.exe' then
if FileList.Strings<>'unins000.dat' then
if FileList.Strings<>'unins000.exe' then
DeleteFile(PChar(FileList.Strings));
end;
for j:=0 to DirList.Count-1 do
begin
Path:=ExtractFilePath(paramstr(0));
FillChar(lpFileOp,SizeOf(lpFileOp),0);
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_DELETE;
lpFileOp.pFrom := PChar(Path+'\'+DirList.Strings[j]);
lpFileOp.fFlags := FOF_NOCONFIRMATION;
SHFileOperation(lpFileOp);
end;
end;
end;
DirList.Free;
FileList.Free;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
close;
end;

end.
 
M

Mesmerized

Кто знает, как изменить этот IS Uninstaller, чтобы он удалял не все файлы, а только папку Save?

unit Uninstaller;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellApi, XPMan;

type
TForm1 = class(TForm)
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1:TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
lpFileOp: TSHFileOpStruct;
DirList:TStringList;
FileList:TStringList;
sr: tSearchRec;
i,j:integer;
Path: string;
begin
MessageBeep(MB_ICONASTERISK);
with Application do
begin
DirList:= TStringList.Create;
FileList:= TStringList.Create;
if findFirst('*.*',faAnyFile,sr)=0 then
repeat
if (sr.Name <> '..') and (sr.Name <> '.') then
begin
if sr.attr=faDirectory then DirList.Add(sr.Name)
else FileList.Add(sr.Name);
end;
until findNext(sr) <> 0;
FindClose(sr);
If MessageBox('Нажмите «Да», если вы хотите удалить все файлы из папки игры (в том числе и сохранения игры), или нажмите «Нет», если хотите оставить файлы, которые не были установлены вместе с игрой.' + #13#10#13#10 + 'Вы хотите удалить все файлы из папки игры?', 'Подтвердите удаление файлов',MB_ICONQUESTION or MB_YesNo) = IDYes then
begin
for i:=0 to FileList.Count-1 do
begin
if FileList.Strings<>'IsUninstaller.exe' then
if FileList.Strings<>'unins000.dat' then
if FileList.Strings<>'unins000.exe' then
DeleteFile(PChar(FileList.Strings));
end;
for j:=0 to DirList.Count-1 do
begin
Path:=ExtractFilePath(paramstr(0));
FillChar(lpFileOp,SizeOf(lpFileOp),0);
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_DELETE;
lpFileOp.pFrom := PChar(Path+'\'+DirList.Strings[j]);
lpFileOp.fFlags := FOF_NOCONFIRMATION;
SHFileOperation(lpFileOp);
end;
end;
end;
DirList.Free;
FileList.Free;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
close;
end;

end.
 
M

Mesmerized

Кто знает, как изменить этот IS Uninstaller, чтобы он удалял не все файлы, а только папку Save?

unit Uninstaller;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellApi, XPMan;

type
TForm1 = class(TForm)
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1:TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
lpFileOp: TSHFileOpStruct;
DirList:TStringList;
FileList:TStringList;
sr: tSearchRec;
i,j:integer;
Path: string;
begin
MessageBeep(MB_ICONASTERISK);
with Application do
begin
DirList:= TStringList.Create;
FileList:= TStringList.Create;
if findFirst('*.*',faAnyFile,sr)=0 then
repeat
if (sr.Name <> '..') and (sr.Name <> '.') then
begin
if sr.attr=faDirectory then DirList.Add(sr.Name)
else FileList.Add(sr.Name);
end;
until findNext(sr) <> 0;
FindClose(sr);
If MessageBox('Нажмите «Да», если вы хотите удалить все файлы из папки игры (в том числе и сохранения игры), или нажмите «Нет», если хотите оставить файлы, которые не были установлены вместе с игрой.' + #13#10#13#10 + 'Вы хотите удалить все файлы из папки игры?', 'Подтвердите удаление файлов',MB_ICONQUESTION or MB_YesNo) = IDYes then
begin
for i:=0 to FileList.Count-1 do
begin
if FileList.Strings<>'IsUninstaller.exe' then
if FileList.Strings<>'unins000.dat' then
if FileList.Strings<>'unins000.exe' then
DeleteFile(PChar(FileList.Strings));
end;
for j:=0 to DirList.Count-1 do
begin
Path:=ExtractFilePath(paramstr(0));
FillChar(lpFileOp,SizeOf(lpFileOp),0);
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_DELETE;
lpFileOp.pFrom := PChar(Path+'\'+DirList.Strings[j]);
lpFileOp.fFlags := FOF_NOCONFIRMATION;
SHFileOperation(lpFileOp);
end;
end;
end;
DirList.Free;
FileList.Free;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
close;
end;

end.
 
G

Guest

Кто знает, как изменить этот IS Uninstaller, чтобы он удалял не все файлы, а только папку Save?

unit Uninstaller;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellApi, XPMan;

type
TForm1 = class(TForm)
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1:TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
lpFileOp: TSHFileOpStruct;
DirList:TStringList;
FileList:TStringList;
sr: tSearchRec;
i,j:integer;
Path: string;
begin
MessageBeep(MB_ICONASTERISK);
with Application do
begin
DirList:= TStringList.Create;
FileList:= TStringList.Create;
if findFirst('*.*',faAnyFile,sr)=0 then
repeat
if (sr.Name <> '..') and (sr.Name <> '.') then
begin
if sr.attr=faDirectory then DirList.Add(sr.Name)
else FileList.Add(sr.Name);
end;
until findNext(sr) <> 0;
FindClose(sr);
If MessageBox('Нажмите «Да», если вы хотите удалить все файлы из папки игры (в том числе и сохранения игры), или нажмите «Нет», если хотите оставить файлы, которые не были установлены вместе с игрой.' + #13#10#13#10 + 'Вы хотите удалить все файлы из папки игры?', 'Подтвердите удаление файлов',MB_ICONQUESTION or MB_YesNo) = IDYes then
begin
for i:=0 to FileList.Count-1 do
begin
if FileList.Strings<>'IsUninstaller.exe' then
if FileList.Strings<>'unins000.dat' then
if FileList.Strings<>'unins000.exe' then
DeleteFile(PChar(FileList.Strings));
end;
for j:=0 to DirList.Count-1 do
begin
Path:=ExtractFilePath(paramstr(0));
FillChar(lpFileOp,SizeOf(lpFileOp),0);
lpFileOp.Wnd := Handle;
lpFileOp.wFunc := FO_DELETE;
lpFileOp.pFrom := PChar(Path+'\'+DirList.Strings[j]);
lpFileOp.fFlags := FOF_NOCONFIRMATION;
SHFileOperation(lpFileOp);
end;
end;
end;
DirList.Free;
FileList.Free;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
close;
end;

end.
 
G

Guest_

Привет, знатокам. Вот назрел такой вопрос, как изменить стиль маленького, а не на весь экран окошка нсталла? НУ например заменить фон, там кое где своего подобюия рамку нарисовать, ну в общем перерисовать весь процесс установки, а то надоели эти бело серые будни большинства инсталлов. Премного благодарен.
 
G

Guest

to Kindly Кста у того типа который зажал, случайно не ник SerGEAnt?
 
G

Guest

Здраствуйте.
Подскажите пожалуйста как при создании инсталляционного файла, я использую Inno Setup 5/1/4, записать данные в INI файл.
Я просто создаю еще одну форму, которая запускается после приветствия и там есть поле введите 'Наименование организациии это необходимо записать в секцию INI файла.

Вот мой код, в котором я создаю свою форму для заполнения данных:

[INI]
Filename: {app}\DATA\USERS\DEFAULT\cbs.INI; Components: program; Section: SetPlat; Key: NAME_PLAT; String: ???? как здесь прорписать данные из секции
Код:
 ???[/b][color=#FF0000]

[CODE]

var
Label1: TLabel;
Edit1: TEdit;

procedure CustomForm_Activate(Page: TWizardPage);
begin
end;

function CustomForm_ShouldSkipPage(Page: TWizardPage): Boolean;
begin
Result := False;
end;

function CustomForm_BackButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;

function CustomForm_NextButtonClick(Page: TWizardPage): Boolean;
begin
Result := True;
end;

procedure CustomForm_CancelButtonClick(Page: TWizardPage; var Cancel, Confirm: Boolean);
begin
end;

function CustomForm_CreatePage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
begin
Page := CreateCustomPage(
PreviousPageId,
ExpandConstant('{cm:CustomFormCaption}'),
ExpandConstant('{cm:CustomFormDescription}')
);

{ Label1 }
Label1 := TLabel.Create(Page);
with Label1 do
begin
Parent := Page.Surface;
Left := ScaleX(152);
Top := ScaleY(24);
Width := ScaleX(31);
Height := ScaleY(13);
Caption := 'Наименование организации';
end;

{ Edit1 }
Edit1 := TEdit.Create(Page);
with Edit1 do
begin
Parent := Page.Surface;
Left := ScaleX(16);
Top := ScaleY(24);
Width := ScaleX(129);
Height := ScaleY(21);
TabOrder := 0;
Text := '';
end;

with Page do
begin
OnActivate := @CustomForm_Activate;
OnShouldSkipPage := @CustomForm_ShouldSkipPage;
OnBackButtonClick := @CustomForm_BackButtonClick;
OnNextButtonClick := @CustomForm_NextButtonClick;
OnCancelButtonClick := @CustomForm_CancelButtonClick;
end;

Result := Page.ID;
end;

procedure InitializeWizard();
begin
CustomForm_CreatePage(wpWelcome);
end;

[b]Заранее спасибо![/b]
 
K

Kmike

всем привет. тема жива еще аль нет?
мож поможете?
как сделать так, чтоб при вызове скрипта и последующей компиляции инсталяшки конечному .ехе файлу присваивалось имя на единицу больше предыдущего? Скажем, была инсталяшка "Setup_1.01", после следующей компиляции у файла д.б. имя "Setup_1.02" и так далее? Руками то конечно поменять не проблема, но фишка вся именно в автоматизации процесса.
 
H

Hattrick

Помогите, пожалуйста. Где найти в реестре путь к установленной программе? Нужно для того, чтобы вставить код в Inno Setup.
 
K

Kmike

Помогите, пожалуйста. Где найти в реестре путь к установленной программе? Нужно для того, чтобы вставить код в Inno Setup.

у программы есть AppId? наверно есть :) тогда можно, например, так:


if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9523CA71-F511-4AA2-B210-0D3B343A7073}_is1', 'InstallLocation', MyProgramLocation) then
begin
MyProgramLocation := RemoveBackslash(MyProgramLocation)


где {9523CA71-F511-4AA2-B210-0D3B343A7073} - AppId
MyProgramLocation - переменная, в которую записывается путь, по которому находится программа. Так как этот путь получается в кавычках, то может понадобиться строка
MyProgramLocation := RemoveBackslash(MyProgramLocation)
 
H

Hattrick

Хммм. По данному адресу установочный путь отсутствует.


Но я нашел установочный путь в другом месте


Какой же способ выбрать тогда??? :)
 
K

Kmike

ну, в первом случае у тя есть UninstallString. Moжно в моей строке 'InstallLocation' заменить на 'UninstallString', откинув затем в полученном стринге EAUninstall.exe получаешь папку, где установленна программа.

Можно наверное использоват путь на твоей второй картинке и использовать 'Install Dir', хотя не знаю, получится ли.

Может есть какой другой лучший способ. я пользуюсь описанным выше.
 
E

_Egorka_

Доброго времени суток!
У меня возникла проблема:
собрал инсталлятор с фоновым рисунком,при запуске появляется фоновое окно с градиентом
(и больше ничего!),затем через продолжительное время (больше 5 минут)-фоновый рисунок и

окно установки программы.Инсталлятор многотомный,разбит по 800 мб ,общий обьём 4600 мб.
Пробовал запускать на другом компе - екзешник и первый том.При запуске появилось

фоновое окно,
затем через некоторое время - запрос на второй том . Я так понимаю,что фоновый рисунок

содержится аж в последнем архиве,а прога ищет его во всех по порядку! - оттого и так

много времени проходит.
Пожалуйста,помогите разобратся!

заранее благодарен.

Скрипт для фонового рисунка такой,как на странице 2 этого форума
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!