Старожил
Сообщения: 440
Благодарности: 251
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
Цитата Neutron:
Можно ли сделать так, что бы если например какая программа или игра установлена, и при запуске инсталлятора были 3 кнопки Запустить Удалить Отмена? »
|
Набросал на скорую руку
Код: 
#define Name "My Program"
[Setup]
AppName={#Name}
AppVerName={#Name}
DefaultDirName={pf}\{#Name}
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Messages]
rus.SetupWindowTitle={#Name}
[Files]
;Source: My Program.exe; DestDir: {app}; Flags: ignoreversion nocompression;
[Registry]
Root: HKLM; Subkey: "SOFTWARE\{#Name}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\{#Name}"; ValueName: "Path"; ValueType: String; ValueData: "{app}\"; Flags: uninsdeletekey
[UninstallDelete]
Type: filesandordirs; Name: {app};
[_Code]
var
AppDir, unins, run: string;
ResultCode: Integer;
UninsButton, RunButton: TButton;
MyLabel: TLabel;
procedure ReadEntries;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\{#Name}', 'Path', AppDir);
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
end;
procedure Uninstall(Sender: TObject);
begin
unins:='unins000.exe';
ReadEntries;
if not (FileExists(AddBackslash(AppDir) + unins)) then
MsgBox('Невозможно запустить деинсталляцию программы ' + ExpandConstant('{#Name}') + ', т.к. исполняемый файл деинсталляции unins000.exe не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1)
else
Exec(AddBackslash(AppDir) + unins, '', ExtractFilePath(AddBackslash(AppDir) + unins), SW_SHOW, ewNoWait, ResultCode);
WizardForm.Close;
end;
procedure RunProgramm(Sender: TObject);
begin
run:='My Program.exe';
ReadEntries;
if (FileExists(AddBackslash(AppDir) + run)) then
Exec(AddBackslash(AppDir) + run, '', ExtractFilePath(AddBackslash(AppDir) + run), SW_SHOW, ewNoWait, ResultCode);
WizardForm.Close;
end;
procedure NewForm;
begin
ReadEntries;
if (RegValueExists(HKLM, 'SOFTWARE\{#Name}', 'Path')) and (FileExists(ExpandConstant(AppDir)+'\My Program.exe')) then begin
with WizardForm do
begin
ClientWidth := ScaleX(395);
ClientHeight := ScaleY(120);
Bevel.Hide;
InnerNotebook.Hide;
OuterNotebook.Hide;
BorderStyle:= bsDialog;
Center;
with CancelButton do
begin
Left := WizardForm.CancelButton.Left -100;
Top := WizardForm.ClientHeight - CancelButton.Height - ScaleY(10);
BringToFront;
end;
UninsButton:= TButton.Create(WizardForm);
with UninsButton do
begin
Left := WizardForm.NextButton.Left -100;
Top := WizardForm.ClientHeight - NextButton.Height - ScaleY(10);
Width:= WizardForm.NextButton.Width;
Parent:= WizardForm;
Caption:= 'Удалить';
OnClick := @Uninstall;
BringToFront;
end;
RunButton:= TButton.Create(WizardForm);
with RunButton do
begin
Left := WizardForm.BackButton.Left -110;
Top := WizardForm.ClientHeight - BackButton.Height - ScaleY(10);
Width:= WizardForm.BackButton.Width;
Parent:= WizardForm;
Caption:= 'Запустить';
OnClick := @RunProgramm;
BringToFront;
end;
MyLabel:= TLabel.Create(WizardForm);
with MyLabel do
begin
SetBounds(10,10,380,80);
AutoSize:=False;
WordWrap:=True;
Font.Color:=$000000;
Font.Style:=[fsBold];
Font.Size:=10;
Parent:=WizardForm;
Transparent:=True;
Caption:= 'Программа ' + ExpandConstant('{#Name}') + ' уже установлена на Ваш компьютер.' +#13#13+ 'Выберите нужное действие.';
end;
end;
end;
end;
procedure InitializeWizard;
begin
NewForm;
end;
|
Последний раз редактировалось nik1967, 05-02-2011 в 23:48.
Отправлено: 23:30, 05-02-2011
| #727
|