Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 4]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1270
Благодарности: 1028


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 22-05-2012
Описание: Закрыто
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]


Продолжение обсуждения
Скрипты Inno Setup. Помощь и советы [часть 5]

Отправлено: 18:01, 29-08-2011

 

Забанен


Сообщения: 216
Благодарности: 62

Профиль | Цитировать


Такой вопрос: насчёт #define AppID, я что-то пробовал вставить AppId={{D8E8ADA9-2E6C-49E7-924B-A32B89C23A24} вместо AppId=TheBestAppIdEverMade, компилится нормально, но выдаёт ошибку: Exception Internal error: Failed to pause "reg" constant, где грабли?
Вообще расчитываю на #define AppID "{D8E8ADA9-2E6C-49E7-924B-A32B89C23A24}"
В общем вот:
читать дальше »
Код: Выделить весь код
#define AppID "{D8E8ADA9-2E6C-49E7-924B-A32B89C23A24}"
#define AppName "My Program"
#define AppExeName "MyProg.exe"
#define InExe "setup.exe"
#define UnExe "unins000.exe"

[Setup]
AppId={{#AppID}
AppName={#AppName}
AppVerName={#AppName}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}


[Files]
Source: hl2.exe; DestDir: {app}\common\half-life 2; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension sortfilesbyname


[  Code]
var
  Run_Button: TNewButton;
  Del_Button: TNewButton;
  AppPath, UninsPath: string;
  ResultCode: Integer;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1') then
  Confirm:= False;
end;

procedure UninstallButtonClick(Sender: TObject);
begin
  Exec(UninsPath, '', '' , SW_SHOW, ewNoWait, ResultCode);
  SendMessage(WizardForm.CancelButton.Handle, $00F5, 0, 0);          
end;

procedure RunButtonClick(Sender: TObject);
begin
  Exec(AppPath + '\common\half-life 2\hl2.exe', '', '', SW_SHOW, ewNoWait, ResultCode);
  SendMessage(WizardForm.CancelButton.Handle, $00F5, 0, 0);
end;

procedure InitializeWizard;
begin
  AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|}'));
  UninsPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,UninstallString|}'));
    { Run_Button }
      Run_Button := TNewButton.Create(WizardForm);
      with Run_Button do
      begin
        Name := 'Run_Button';
        Parent := WizardForm;
        Left := ScaleX(240);
        Top := ScaleY(327);
        Width := ScaleX(75);
        Height := ScaleY(23);
        Caption := 'Запустить';
        OnClick := @RunButtonClick;
        Enabled := FileExists(AppPath + '\common\half-life 2\hl2.exe');
      end;

    { Del_Button }
      Del_Button := TNewButton.Create(WizardForm);
      with Del_Button do
      begin
        Name := 'Del_Button';
        Parent := WizardForm;
        Left := ScaleX(153);
        Top := ScaleY(327);
        Width := ScaleX(75);
        Height := ScaleY(23);
        Caption := 'Удалить';
        OnClick := @UninstallButtonClick;
      end;

    if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1') then
    MsgBox('Программа {#AppName} уже установлена',mbError,MB_OK);

end;

procedure CurPageChanged(CurPageID: Integer);
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1') and (CurPageId=wpWelcome)
  then
    begin
      Run_Button.Visible := True;
      Del_Button.Visible := True;
      WizardForm.NextButton.Caption := 'Продолжить';
    end
  else
    begin
      Run_Button.Visible := false;
      Del_Button.Visible := false;
    end;
end;
P.S Компилится нормально, но инсталлятор не запускается.

Отправлено: 13:01, 08-05-2012 | #1861



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1270
Благодарности: 1028

Профиль | Отправить PM | Цитировать


Devils Night, при раскрытии константы {#SetupSetting("AppID")} значение завершается фигурной скобкой и компилятор считает, что константа {reg} завершена на этой скобке и синтаксис рушится. Экранируй как в справке сказано:
Код: Выделить весь код
[Setup]
AppID={{D8E8ADA9-2E6C-49E7-924B-A32B89C23A24%7d
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:41, 08-05-2012 | #1862


Забанен


Сообщения: 216
Благодарности: 62

Профиль | Цитировать


Цитата El Sanchez:
Экранируй как в справке сказано »
Так не пойдёт AppID={{D8E8ADA9-2E6C-49E7-924B-A32B89C23A24%7d, т.к в реестре так и записывается {D8E8ADA9-2E6C-49E7-924B-A32B89C23A24%7d_is1 а нужно именно AppID={{D8E8ADA9-2E6C-49E7-924B-A32B89C23A24}, потому что устройство проверяет именно этот ключ, да и с учётом скобок {}, если там другой набор, то устройство запускает свою программу.

Последний раз редактировалось Devils Night, 08-05-2012 в 21:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:40, 08-05-2012 | #1863


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1270
Благодарности: 1028

Профиль | Отправить PM | Цитировать


Devils Night, спасибо, ясно. Замена закрывающей фигурной скобки для препроцессорных констант на какой-нибудь другой символ ничего не дал, режим С-style препроцессора тоже. Придется использовать RegQueryStringValue.

Отправлено: 21:10, 08-05-2012 | #1864


Забанен


Сообщения: 216
Благодарности: 62

Профиль | Цитировать


El Sanchez, Если без вариантов с тем кодом, то может есть ещё какой вариант? Размер окна не имеет значения, и не обязательно чтоб был маленький, можно и стандарт.
В общем код в три кнопки, такого содержания:
читать дальше »
Код: Выделить весь код
#define AppName "My Program"
#define AppExeName "MyProg.exe"
#define UnExe "unins000.exe"

[Setup]
AppName={#AppName}
AppVerName={#AppName}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Messages]
rus.SetupWindowTitle={#AppName}

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion nocompression;

[Icons]
Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}"
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#AppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(AppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; Subkey: "SOFTWARE\{#AppName}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\{#AppName}"; 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\{#AppName}', 'Path', AppDir);
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
end;

procedure Uninstall(Sender: TObject);
begin
unins:='{#UnExe}';
ReadEntries;
if not (FileExists(AddBackslash(AppDir) + unins)) then
MsgBox('Невозможно запустить деинсталляцию программы ' + ExpandConstant('{#AppName}') + ', т.к. исполняемый файл деинсталляции 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:='{#AppExeName}';
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\{#AppName}', 'Path')) and (FileExists(ExpandConstant(AppDir)+'\{#AppExeName}')) 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('{#AppName}') + ' уже установлена на Ваш компьютер.' +#13#13+ 'Выберите нужное действие.';
end;
end;
end;
end;

procedure InitializeWizard;
begin
NewForm;
end;
//Три кнопки - Конец скрипта


Задача: Добавить ещё одну кнопку Изменить.
Может посоветуешь какой ещё вариант?

Отправлено: 21:43, 08-05-2012 | #1865


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1270
Благодарности: 1028

Профиль | Отправить PM | Цитировать


Цитата Devils Night:
Если без вариантов с тем кодом, то может есть ещё какой вариант? Размер окна не имеет значения, и не обязательно чтоб был маленький, можно и стандарт. »
Devils Night, я в скрипт не вникал, я лишь указал на проблему в строках при GUID-ном AppID:
Код: Выделить весь код
AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|}'));
UninsPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,UninstallString|}'));
..., которую можно решить, заменив раскрытие константы {reg} на функцию RegQueryStringValue:
Код: Выделить весь код
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'InstallLocation', AppPath) then
  AppPath := RemoveQuotes(AppPath);
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', UninsPath) then
  UninsPath := RemoveQuotes(UninsPath);
Цитата Devils Night:
Добавить ещё одну кнопку Изменить. »
Кнопка должна знать где будет находиться дистрибутив во время нажатия на нее. Посмотри как реализовано в Example_Uninstall_3.iss (кнопка UModifyButton) от Restools. Плюс прикрутить AppModifyPath для понту.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:30, 08-05-2012 | #1866


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


El Sanchez, R.i.m.s.k.y.,
можно пожалуйста общий вопрос?
читать дальше »

вот 2 маленьких примера
1.
читать дальше »
Код: Выделить весь код
var
  RichEditViewer1: TRichEditViewer;  /// глобально
  
procedure InitializeWizard();
begin
  { RichEditViewer1 }
  RichEditViewer1 := TRichEditViewer.Create(WizardForm);
  with RichEditViewer1 do
  begin
    Name := 'RichEditViewer1';
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(112);
    Top := ScaleY(112);
    Width := ScaleX(185);
    Height := ScaleY(89);
    Text := '';
  end;
end;

2.
читать дальше »
Код: Выделить весь код
procedure InitializeWizard();
var
  RichEditViewer1: TRichEditViewer;  /// локально
  
begin
  { RichEditViewer1 }
  RichEditViewer1 := TRichEditViewer.Create(WizardForm);
  with RichEditViewer1 do
  begin
    Name := 'RichEditViewer1';
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(112);
    Top := ScaleY(112);
    Width := ScaleX(185);
    Height := ScaleY(89);
    Text := '';
  end;
end;


в первом примере
var
RichEditViewer1: TRichEditViewer; объявлен глобально
а во втором локально в InitializeWizard-е;
читал, что после выполнения процедуры переменная освобождается
Освобождаются ли переменные после инициализации (по окончании работы InitializeWizard) ?
если да, то действительно ли это влияет на производительность
.................................................................................................... ......................................
вот глянь у меня в одном RedesignWizardForm; на данный момент количество переменных
читать дальше »
Код: Выделить весь код
var
  Mr_Valve_Label: TLabel;
  Valve_Label: TLabel;
  Welcome_Label_1: TLabel;
  Welcome_hl2series_Label: TLabel;
  BitmapImage6: TBitmapImage;
  Welcome_Label_2: TLabel;
  BitmapImage10: TBitmapImage;
  BitmapImage11: TBitmapImage;
  Part1_ScrollBox: TScrollBox;
  Intro_BitmapImage1: TBitmapImage;
  BitmapImage1: TBitmapImage;
  BitmapImage3: TBitmapImage;
  BitmapImage8: TBitmapImage;
  BitmapImage7: TBitmapImage;
  BitmapImage12: TBitmapImage;
  BitmapImage13: TBitmapImage;
  BitmapImage14: TBitmapImage;
  BitmapImage15: TBitmapImage;
  BitmapImage16: TBitmapImage;
  BitmapImage17: TBitmapImage;
  BitmapImage18: TBitmapImage;
  BitmapImage19: TBitmapImage;
  BitmapImage20: TBitmapImage;
  BitmapImage21: TBitmapImage;
  BitmapImage22: TBitmapImage;
  BitmapImage23: TBitmapImage;
  BitmapImage24: TBitmapImage;
  BitmapImage25: TBitmapImage;
  BitmapImage26: TBitmapImage;
  BitmapImage27: TBitmapImage;
  BitmapImage28: TBitmapImage;
  BitmapImage29: TBitmapImage;
  BitmapImage30: TBitmapImage;
  BitmapImage31: TBitmapImage;
  BitmapImage32: TBitmapImage;
  BitmapImage33: TBitmapImage;
  BitmapImage34: TBitmapImage;
  BitmapImage35: TBitmapImage;
  BitmapImage36: TBitmapImage;
  BitmapImage37: TBitmapImage;
  Label_Lambda: TLabel;
  BitmapImage38: TBitmapImage;
  BitmapImage39: TBitmapImage;
  BitmapImage40: TBitmapImage;
  BitmapImage41: TBitmapImage;
  BitmapImage42: TBitmapImage;
  BitmapImage43: TBitmapImage;
  BitmapImage44: TBitmapImage;
  BitmapImage45: TBitmapImage;
  BitmapImage46: TBitmapImage;
  BitmapImage47: TBitmapImage;
  BitmapImage48: TBitmapImage;
  BitmapImage49: TBitmapImage;
  BitmapImage50: TBitmapImage;
  BitmapImage51: TBitmapImage;
  BitmapImage52: TBitmapImage;
  BitmapImage53: TBitmapImage;
  BitmapImage55: TBitmapImage;
  BitmapImage54: TBitmapImage;
  BitmapImage56: TBitmapImage;
  BitmapImage57: TBitmapImage;
  BitmapImage58: TBitmapImage;
  BitmapImage59: TBitmapImage;
  BitmapImage60: TBitmapImage;
  BitmapImage61: TBitmapImage;
  BitmapImage62: TBitmapImage;
  BitmapImage63: TBitmapImage;
  BitmapImage64: TBitmapImage;
  BitmapImage65: TBitmapImage;
  BitmapImage66: TBitmapImage;
  BitmapImage67: TBitmapImage;
  BitmapImage68: TBitmapImage;
  BitmapImage69: TBitmapImage;
  BitmapImage2: TBitmapImage;
  BitmapImage70: TBitmapImage;
  BitmapImage71: TBitmapImage;
  BitmapImage72: TBitmapImage;
  BitmapImage73: TBitmapImage;
  BitmapImage74: TBitmapImage;
  BitmapImage75: TBitmapImage;
  BitmapImage76: TBitmapImage;
  BitmapImage77: TBitmapImage;
  BitmapImage78: TBitmapImage;
  Label1: TLabel;
  Label2: TLabel;
  Label3: TLabel;
  RichEditViewer10: TRichEditViewer;
  hl2_universe_Panel: TPanel;
  L1: TLabel;
  Intro_hl2_Label: TLabel;
  RichEditViewer1: TRichEditViewer;
  RichEditViewer3: TRichEditViewer;
  RichEditViewer2: TRichEditViewer;
  RichEditViewer6: TRichEditViewer;
  RichEditViewer7: TRichEditViewer;
  RichEditViewer8: TRichEditViewer;
  RichEditViewer9: TRichEditViewer;
  RichEditViewer11: TRichEditViewer;
  RichEditViewer12: TRichEditViewer;
  RichEditViewer13: TRichEditViewer;
  RichEditViewer14: TRichEditViewer;
  RichEditViewer15: TRichEditViewer;
  RichEditViewer16: TRichEditViewer;
  RichEditViewer17: TRichEditViewer;
  RichEditViewer18: TRichEditViewer;
  RichEditViewer19: TRichEditViewer;
  RichEditViewer20: TRichEditViewer;
  RichEditViewer21: TRichEditViewer;
  RichEditViewer22: TRichEditViewer;
  RichEditViewer23: TRichEditViewer;
  RichEditViewer24: TRichEditViewer;
  RichEditViewer25: TRichEditViewer;
  RichEditViewer26: TRichEditViewer;
  RichEditViewer27: TRichEditViewer;
  RichEditViewer28: TRichEditViewer;
  RichEditViewer29: TRichEditViewer;
  RichEditViewer30: TRichEditViewer;
  RichEditViewer31: TRichEditViewer;
  RichEditViewer32: TRichEditViewer;
  RichEditViewer33: TRichEditViewer;
  RichEditViewer34: TRichEditViewer;
  RichEditViewer35: TRichEditViewer;
  RichEditViewer36: TRichEditViewer;
  RichEditViewer37: TRichEditViewer;
  RichEditViewer38: TRichEditViewer;
  RichEditViewer39: TRichEditViewer;
  RichEditViewer40: TRichEditViewer;
  RichEditViewer41: TRichEditViewer;
  RichEditViewer42: TRichEditViewer;
  RichEditViewer43: TRichEditViewer;
  RichEditViewer44: TRichEditViewer;
  RichEditViewer45: TRichEditViewer;
  RichEditViewer46: TRichEditViewer;
  RichEditViewer47: TRichEditViewer;
  RichEditViewer48: TRichEditViewer;
  RichEditViewer49: TRichEditViewer;
  RichEditViewer50: TRichEditViewer;
  RichEditViewer51: TRichEditViewer;
  RichEditViewer52: TRichEditViewer;
  RichEditViewer53: TRichEditViewer;
  RichEditViewer54: TRichEditViewer;
  RichEditViewer55: TRichEditViewer;
  RichEditViewer56: TRichEditViewer;
  RichEditViewer57: TRichEditViewer;
  RichEditViewer58: TRichEditViewer;
  RichEditViewer59: TRichEditViewer;
  RichEditViewer60: TRichEditViewer;
  RichEditViewer61: TRichEditViewer;
  RichEditViewer62: TRichEditViewer;
  RichEditViewer63: TRichEditViewer;
  RichEditViewer64: TRichEditViewer;
  RichEditViewer65: TRichEditViewer;
  RichEditViewer66: TRichEditViewer;
  RichEditViewer67: TRichEditViewer;
  RichEditViewer68: TRichEditViewer;
  RichEditViewer69: TRichEditViewer;
  RichEditViewer70: TRichEditViewer;
  RichEditViewer71: TRichEditViewer;
  RichEditViewer72: TRichEditViewer;
  RichEditViewer73: TRichEditViewer;
  RichEditViewer74: TRichEditViewer;
  RichEditViewer75: TRichEditViewer;
  RichEditViewer76: TRichEditViewer;
  RichEditViewer77: TRichEditViewer;
  RichEditViewer78: TRichEditViewer;
  RichEditViewer4: TRichEditViewer;
  BitmapImage5: TBitmapImage;
  Trinagle_bmp: TBitmapImage;
  IsCyrillicLabel: TLabel;
  ListBox: TNewListBox;
  hl2_ScrollBox: TScrollBox;
  hl2_screens_Image: TBitmapImage;
  hl2_ep1_ScrollBox: TScrollBox;
  hl2_ep1_screens_Image: TBitmapImage;
  hl2_ep2_ScrollBox: TScrollBox;
  hl2_ep2_screens_Image: TBitmapImage;
  portal_ScrollBox: TScrollBox;
  portal_screens_Image: TBitmapImage;
  ComponentsPage: TWizardPage;
  hl2_MainLable: TLabel;
  ep1_MainLable: TLabel;
  ep2_MainLabel: TLabel;
  BitmapImage4: TBitmapImage;
  PortalC_Image: TBitmapImage;
  hl2_panel: TPanel;
  hl2_CheckBox: TNewCheckBox;
  hl2_borealis_CheckBox: TNewCheckBox;
  hl2_icon_CheckBox: TNewCheckBox;
  hl2_ru_en_RadioButton: TNewRadioButton;
  hl2_en_RadioButton: TNewRadioButton;
  hl2_ru_RadioButton: TNewRadioButton;
  hl2_buka_CheckBox: TNewCheckBox;
  hl2_launch_Edit: TNewEdit;
  hl2_main_CheckBox: TNewCheckBox;
  hl2_ep1_panel: TPanel;
  hl2_ep1_CheckBox: TNewCheckBox;
  hl2_ep1_ru_en_RadioButton: TNewRadioButton;
  hl2_ep1_en_RadioButton: TNewRadioButton;
  hl2_ep1_ru_RadioButton: TNewRadioButton;
  hl2_ep1_Icon_CheckBox: TNewCheckBox;
  ep1_Launch_Edit: TNewEdit;
  ep2_panel: TPanel;
  hl2_ep2_CheckBox: TNewCheckBox;
  hl2_ep2_ru_en_RadioButton: TNewRadioButton;
  hl2_ep2_en_Radiobutton: TNewRadioButton;
  hl2_ep2_ru_RadioButton: TNewRadioButton;
  hl2_ep2_Icon_CheckBox: TNewCheckBox;
  ep2_Launch_Edit: TNewEdit;
  portal_panel: TPanel;
  portal_CheckBox: TNewCheckBox;
  portal_ru_en_RadioButton: TNewRadioButton;
  portal_en_RadioButton: TNewRadioButton;
  portal_ru_RadioButton: TNewRadioButton;
  portal_Icon_CheckBox: TNewCheckBox;
  portal_Launch_Edit: TNewEdit;
  hl2_ep2_main_CheckBox: TNewCheckBox;
  hl2_ep1_main_CheckBox: TNewCheckBox;
  portal_main_CheckBox: TNewCheckBox;
  SpeedBtnPanel: TPanel;
  SpeedBtn: TNewSpeedButton;
  TypeComboBox: TNewComboBox;
  ClearButton: TNewButton;
  SettingPanel: TPanel;
  BitmapImage9: TBitmapImage;

а ниже ещё есть целая пачка
(перед компиляцией, когда время придёт, собираюсь перенести всё из этого дубликатора в InitializeWizard) и все переменные по местам (локально/глобально)
А также есть ли разница после написания
так
var
Mr_Valve_Label: TLabel;
Valve_Label: TLabel;

или так (кажется правильнее)

var
Mr_Valve_Label, Valve_Label: TLabel;

Последний раз редактировалось Johny777, 09-05-2012 в 02:31.


Отправлено: 23:32, 08-05-2012 | #1867


Забанен


Сообщения: 216
Благодарности: 62

Профиль | Цитировать


El Sanchez, Спасибо! Всё получилось как надо , вот что вышло:
читать дальше »
Код: Выделить весь код
// Скрипт 4 кнопки (Запустить|Удалить|Продолжить|Отмена|)
// Частично состоит из авторана El Sanchez (http://forum.oszone.net/member.php?userid=132675) для HL
// Модифицировал скрипт под 4 кнопки: Johny777 (http://forum.oszone.net/member.php?userid=324607)
// Поправил: El Sanchez (http://forum.oszone.net/member.php?userid=132675)

#define AppID "{D8E8ADA9-2E6C-49E7-924B-A32B89C23A24}"
#define AppName "My Program"
#define AppExeName "MyProg.exe"
#define InExe "setup.exe"
#define UnExe "{uninstallexe}"

[Setup]
AppName={#AppName}
AppVerName={#AppName}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}
AppId={{#AppID}

[CustomMessages]
english.Uninstall=&Uninstall
english.Run=&Run
english.Proceed=&Proceed
english.Cancel=&Cancel
english.Alreadyinstalled=The program {#AppName} is already installed
Russian.Uninstall=&Удалить
Russian.Run=&Запустить
Russian.Proceed=&Продолжить
Russian.Cancel=&Отмена
Russian.Alreadyinstalled=Программа {#AppName} уже установлена

[Languages]
Name: Russian; MessagesFile: compiler:Languages\Russian.isl
Name: "english"; MessagesFile: "compiler:Languages\English.isl"

[Files]
Source:compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion sortfilesbyname

[ Code]
var
  Run_Button: TNewButton;
  Del_Button: TNewButton;
  AppPath, UninsPath: string;
  ResultCode: Integer;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
end;

procedure UninstallButtonClick(Sender: TObject);
begin
  Exec(UninsPath, '', '' , SW_SHOW, ewNoWait, ResultCode);
  SendMessage(WizardForm.CancelButton.Handle, $00F5, 0, 0);
end;

procedure RunButtonClick(Sender: TObject);
begin
  Exec(AppPath + '{#AppExeName}', '', '', SW_SHOW, ewNoWait, ResultCode);
  SendMessage(WizardForm.CancelButton.Handle, $00F5, 0, 0);
end;

procedure InitializeWizard;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1', 'InstallLocation', AppPath) then
  AppPath := RemoveQuotes(AppPath);
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1', 'UninstallString', UninsPath) then
  UninsPath := RemoveQuotes(UninsPath);
    begin
    { Run_Button }
      Run_Button := TNewButton.Create(WizardForm);
      with Run_Button do
      begin
        Name := 'Run_Button';
        Parent := WizardForm;
        Left := ScaleX(240);
        Top := ScaleY(327);
        Width := ScaleX(75);
        Height := ScaleY(23);
        Caption:= ExpandConstant('{cm:Run}');
        OnClick := @RunButtonClick;
      end;

    { Del_Button }
      Del_Button := TNewButton.Create(WizardForm);
      with Del_Button do
      begin
        Name := 'Del_Button';
        Parent := WizardForm;
        Left := ScaleX(153);
        Top := ScaleY(327);
        Width := ScaleX(75);
        Height := ScaleY(23);
        Caption:= ExpandConstant('{cm:Uninstall}');
        OnClick := @UninstallButtonClick;
      end;

    if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1') then
    MsgBox(ExpandConstant('{cm:Alreadyinstalled}'),mbError,MB_OK);
    
    if FileExists(AppPath + '{#AppExeName}') then
    begin
      Run_Button.Enabled:=true;
    end
    else
      Run_Button.Enabled:=false;
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1') and (CurPageId=wpWelcome)
  then
    begin
      Run_Button.Visible := True;
      Del_Button.Visible := True;
      WizardForm.NextButton.Caption:= ExpandConstant('{cm:Proceed}');
    end
  else
    begin
      Run_Button.Visible := false;
      Del_Button.Visible := false;
//      WizardForm.Caption := ExpandConstant(SetupMessage(msgButtonNext));
    end;
end;

Последний раз редактировалось Devils Night, 09-05-2012 в 05:53.


Отправлено: 05:45, 09-05-2012 | #1868


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1270
Благодарности: 1028

Профиль | Отправить PM | Цитировать


Цитата Johny777:
Освобождаются ли переменные после инициализации (по окончании работы InitializeWizard) ? »
Johny777, видимо да, раз обратиться к локальной переменной извне нельзя.
Цитата Johny777:
А также есть ли разница после написания
так
var
Mr_Valve_Label: TLabel;
Valve_Label: TLabel;
или так (кажется правильнее)
var
Mr_Valve_Label, Valve_Label: TLabel; »
Johny777, а без разницы, простое объявление переменных, но второе предпочтительней, т.к. ведет к краткости кода.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:34, 09-05-2012 | #1869


Аватара для alert30

Ветеран


Сообщения: 1088
Благодарности: 162

Профиль | Отправить PM | Цитировать


wertulll, если хочешь вот такой инсталлятор, найди "главного врача" (setup.exe <-> install.exe), распакуй сторонним программом (Universal Extractor) и там найдешь реальный скрипт install_script.iss.

Отправлено: 12:03, 09-05-2012 | #1870



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Test ferget Тест-форум 0 24-08-2011 01:25
test ! ! Aaa ! ! Тест-форум 0 23-04-2011 11:29
test Santa aka Snt Тест-форум 0 16-04-2011 22:35
test xolod. Программное обеспечение Linux и FreeBSD 0 19-04-2009 21:03
Test memory KEugeNik Хочу все знать 11 23-11-2003 23:11




 
Переход