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

  • Автор темы Автор темы Kindly
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ндя, жмот чел оказался... GuEst сенкс, будем разбираться.
 
To Expeditor!
Если не трудно вышлите мне на мыло ту софтину, которую вы написали для того, чтобы конвертировать нормальные файлы в пустые. А то, очень нужна. t-tan@list.ru
P.S: Извиняюсь, что так поздно прошу.
 
To Expeditor!
Если не трудно вышлите мне на мыло ту софтину, которую вы написали для того, чтобы конвертировать нормальные файлы в пустые. А то, очень нужна. t-tan@list.ru
P.S: Извиняюсь, что так поздно прошу.
 
извиняюсь, что с таким ламерским вопросом лезу, но нужна помощь.
с программой начал работать только сегодня и не программист, так что многое непонятно.
Вопрос в следующем: как удалить существующие файлы? ниже распишу подробнее.
Задача была такая: есть старая версия установленной программы. там была такая часть: Папка\Имя файла.
В новой версии структура этой части немного другая: Папка\Папка2\Имя файла
При установке инсталлятор проверяет наличие старой версии и конкретно наличие данного файла. если он есть, то переписывает его под свою структуру. Это я сделал.
Но у меня остается старая структура: Папка\Имя файла. Т.е. файл (Имя файла) дублируется, а у меня не получается его удалить.
В хелпе нашел функции DeleteFile и DelTree, но я наверно как-то их не правильно использую - ничего не получается, при компиляци обычно выдает ошибку. Подскажите плиз.
 
Попробуй скачать отсюда руководство, вверху топика: link removed
Там в принципе встречается пример удаления.
 
Кто знает, как изменить этот 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.
 
Кто знает, как изменить этот 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.
 
Кто знает, как изменить этот 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.
 
Кто знает, как изменить этот 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.
 
Привет, знатокам. Вот назрел такой вопрос, как изменить стиль маленького, а не на весь экран окошка нсталла? НУ например заменить фон, там кое где своего подобюия рамку нарисовать, ну в общем перерисовать весь процесс установки, а то надоели эти бело серые будни большинства инсталлов. Премного благодарен.
 
to Kindly Кста у того типа который зажал, случайно не ник SerGEAnt?
 
Здраствуйте.
Подскажите пожалуйста как при создании инсталляционного файла, я использую 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]
 
всем привет. тема жива еще аль нет?
мож поможете?
как сделать так, чтоб при вызове скрипта и последующей компиляции инсталяшки конечному .ехе файлу присваивалось имя на единицу больше предыдущего? Скажем, была инсталяшка "Setup_1.01", после следующей компиляции у файла д.б. имя "Setup_1.02" и так далее? Руками то конечно поменять не проблема, но фишка вся именно в автоматизации процесса.
 
Помогите, пожалуйста. Где найти в реестре путь к установленной программе? Нужно для того, чтобы вставить код в Inno Setup.
 
Помогите, пожалуйста. Где найти в реестре путь к установленной программе? Нужно для того, чтобы вставить код в 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)
 
Хммм. По данному адресу установочный путь отсутствует.


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


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

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

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

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

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

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

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

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

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

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