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

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

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

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

Ветеран


Contributor


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


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

Профиль | Отправить 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

 

Аватара для R.i.m.s.k.y.

Ветеран


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

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


Temyraz@fb, у кого можно спросить подписаны на эту тему
ждите ответа, ждите ответа...

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 13:56, 15-03-2012 | #1111



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

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


Аватара для Johny777

Ветеран


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

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


Temyraz@fb,
путь можно выбрать через эдит и string, но мне пока далеко до такого, потму что путь нужно получить из TFolderTreeView
а чтобы появлялось окно с выбором директории это нужно создать форму при нажатии на кнопку (такое есть) и в ней TFolderTreeView, как на странице выбора директории установки
попробовать могу, но не факт, что получится. Мне в будущем нужно тоже сохранёнки и достижения пред удалением сохранять, но путь хотел сделать статичным на рабочий стол.
Цитата Temyraz@fb:
хочет во время удаления появляться страницы »
есть такой пример создания формы после удаления, если тебе это поможет

читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
DirExistsWarning=no

[Files]
;Source: Files\*; DestDir: {app}

[  Code]
const
  bidDelAll = 1;
  bidSkipAll = 2;
var
  Form: TSetupForm;
  CheckListBox: TNewCheckListBox;
  AllButton, UnAllButton, InvertButton: TButton;
  CancelButton, DelButton: TButton;

  MsgForm: TSetupForm;
  MsgAllButton, MsgSkipAllButton: TButton;
  MsgCancelButton, MsgDelButton: TButton;

  DelAllReadOnly: Boolean;
  SkipAllReadOnly: Boolean;

function Size64(Hi, Lo: integer): Extended;
var
  i: integer;
begin
  Result:= Lo;
  if Lo < 0 then
    Result:= Result + 2147483647 + 2147483647 + 2;
  i:= Hi;
  while i > 0 do
    begin
      Result:= Result + 2147483647 + 2147483647 + 2;
      i:= i - 1;
    end;
end;

procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
  FSR, DSR: TFindRec;
  FindResult: Boolean;
  APath: string;
  i: integer;
begin
  APath := AddBackslash(fromDir);
  FindResult := FindFirst(APath + fileMask, FSR);
  try
    while FindResult do
    begin
      if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
        begin
  {files} i:= CheckListBox.AddCheckBox(FSR.Name, FloatToStr(Size64(FSR.SizeHigh, FSR.SizeLow)) + ' byte', Level, True, True, False, True, TStringList.Create);
          TStrings(CheckListBox.ItemObject[i]).Text:= APath + FSR.Name;
        end;
      FindResult := FindNext(FSR);
    end;
    FindResult := FindFirst(APath + '*.*', DSR);
    while FindResult do
    begin
      if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then
          begin
      {dir} i:= CheckListBox.AddCheckBox(DSR.Name,'DIR', Level, True, True, False, True, TStringList.Create);
            TStrings(CheckListBox.ItemObject[i]).Text:= APath + DSR.Name;
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
          end;
      FindResult := FindNext(DSR);
    end;
  finally
    FindClose(FSR);
    FindClose(DSR);
  end;
end;

procedure ButtonOnClick(Sender: TObject);
begin
#if Ver < 83954944
  CheckListBox.Checked[0]:= TButton(Sender).Tag = 0;
#else
  Case TButton(Sender).Tag of
    0 : CheckListBox.CheckItem(0, coCheckWithChildren);
    1 : CheckListBox.CheckItem(0, coUncheck);
  end;
#endif
end;

function HasChildren(Box: TNewCheckListBox; ItemIndex: integer): Boolean;
begin
  if (ItemIndex = Box.Items.Count - 1) or (Box.ItemLevel[ItemIndex+1] <= Box.ItemLevel[ItemIndex])  then
    Result:= False
  else
    Result:= True;
end;

procedure InvertOnClick(Sender: TObject);
var
  i: integer;
begin
  for i:= 1 to CheckListBox.Items.Count - 1 do
    begin
      if Not HasChildren(CheckListBox, i)  then
        CheckListBox.Checked[i]:= Not (CheckListBox.State[i] = cbChecked);
    end;
end;

procedure MsgButtonOnClick(Sender: TObject);
begin
  Case TButton(Sender).Tag of
    bidDelAll : DelAllReadOnly:= True;
    bidSkipAll: SkipAllReadOnly:= True;
  end;
  MsgForm.Close;
end;

function DelMsgBox(FileName: string): Boolean;
var
  MsgLabel: TLabel;
begin
  MsgForm:= CreateCustomForm;
  MsgForm.ClientWidth := ScaleX(400);
  MsgForm.ClientHeight := ScaleY(120);
  MsgForm.Caption := 'Files to delete';
  MsgForm.Center;

  MsgLabel := TLabel.Create(MsgForm);
  MsgLabel.Left := ScaleX(20);
  MsgLabel.Top := ScaleY(20);
  MsgLabel.Caption:= FileName + ' is protected file or directory !' + #10#10#13 +
                     'Do you want to delete the file with READONLY attribute ?';
  MsgLabel.Parent := MsgForm;

  MsgAllButton := TButton.Create(MsgForm);
  MsgAllButton.Parent := MsgForm;
  MsgAllButton.Width := ScaleX(75);
  MsgAllButton.Height := ScaleY(23);
  MsgAllButton.Left := ScaleX(20);
  MsgAllButton.Top := MsgForm.ClientHeight - ScaleY(23 + 10);
  MsgAllButton.Caption := 'Delete All';
  MsgAllButton.Tag:= bidDelAll;
  MsgAllButton.OnClick := @MsgButtonOnClick;

  MsgSkipAllButton := TButton.Create(MsgForm);
  MsgSkipAllButton.Parent := MsgForm;
  MsgSkipAllButton.Width := ScaleX(75);
  MsgSkipAllButton.Height := ScaleY(23);
  MsgSkipAllButton.Left := MsgAllButton.Left + MsgAllButton.Width + ScaleX(10);
  MsgSkipAllButton.Top := MsgForm.ClientHeight - ScaleY(23 + 10);
  MsgSkipAllButton.Caption := 'Skip All';
  MsgSkipAllButton.Tag:= bidSkipAll;
  MsgSkipAllButton.OnClick := @MsgButtonOnClick;

  MsgCancelButton := TButton.Create(MsgForm);
  MsgCancelButton.Parent := MsgForm;
  MsgCancelButton.Width := ScaleX(75);
  MsgCancelButton.Height := ScaleY(23);
  MsgCancelButton.Left := MsgForm.ClientWidth - MsgCancelButton.Width - ScaleX(20);
  MsgCancelButton.Top := MsgForm.ClientHeight - ScaleY(23 + 10);
  MsgCancelButton.Caption := 'Skip';
  MsgCancelButton.ModalResult := mrCancel;

  MsgDelButton := TButton.Create(MsgForm);
  MsgDelButton.Parent := MsgForm;
  MsgDelButton.Width := ScaleX(75);
  MsgDelButton.Height := ScaleY(23);
  MsgDelButton.Left := MsgCancelButton.Left - MsgDelButton.Width - ScaleX(10);
  MsgDelButton.Top := MsgForm.ClientHeight - ScaleY(23 + 10);
  MsgDelButton.Caption := 'Delete';
  MsgDelButton.ModalResult := mrOk;

  MsgForm.ActiveControl:= MsgCancelButton;

  if MsgForm.ShowModal() = mrOk then
    Result:= True
  else
    Result:= False;
end;

procedure DeleteFiles();
var
  SR: TFindRec;
  i: integer;
  str: string;
  ResultCode: Integer;
begin
  DelAllReadOnly:= False;
  SkipAllReadOnly:= False;
  for i:= CheckListBox.Items.Count - 1 downto 0 do
    begin
      if CheckListBox.State[i] = cbChecked then
        begin
          str:= Trim(TStrings(CheckListBox.ItemObject[i]).Text);
          FindFirst(str, SR);
          if ((SR.Attributes and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY) then
            if Not (DelAllReadOnly or SkipAllReadOnly) then
              if DelMsgBox(SR.Name) then
                Exec('attrib', ' -h -s -r ' + '"' + str + '"',
                  '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
            if DelAllReadOnly then
                Exec('attrib', ' -h -s -r ' + '"' + str + '"',
                  '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
          FindClose(SR);
          DeleteFile(str);
          RemoveDir(str);
        end;
    end;
end;

procedure BrowseRemainedFiles();
begin
  Form:= CreateCustomForm;
  Form.ClientWidth := ScaleX(500);
  Form.ClientHeight := ScaleY(400);
  Form.Caption := 'Files to delete';
  Form.Center;

  CheckListBox := TNewCheckListBox.Create(Form);
  CheckListBox.Left:= ScaleX(20);
  CheckListBox.Top:= ScaleY(20);
  CheckListBox.Width:= Form.ClientWidth - ScaleX(20*2);
  CheckListBox.Height:= Form.ClientHeight - ScaleY(23*2 + 20);
  CheckListBox.Offset:= 0;
  CheckListBox.Parent:= Form;

  AllButton := TButton.Create(Form);
  AllButton.Parent := Form;
  AllButton.Width := ScaleX(75);
  AllButton.Height := ScaleY(23);
  AllButton.Left := ScaleX(20);
  AllButton.Top := Form.ClientHeight - ScaleY(23 + 10);
  AllButton.Caption := 'Select All';
  AllButton.Tag:= 0;
  AllButton.OnClick := @ButtonOnClick;

  UnAllButton := TButton.Create(Form);
  UnAllButton.Parent := Form;
  UnAllButton.Width := ScaleX(75);
  UnAllButton.Height := ScaleY(23);
  UnAllButton.Left := AllButton.Left + AllButton.Width + ScaleX(10);
  UnAllButton.Top := Form.ClientHeight - ScaleY(23 + 10);
  UnAllButton.Caption := 'Clear All';
  UnAllButton.Tag:= 1;
  UnAllButton.OnClick := @ButtonOnClick;

  InvertButton := TButton.Create(Form);
  InvertButton.Parent := Form;
  InvertButton.Width := ScaleX(75);
  InvertButton.Height := ScaleY(23);
  InvertButton.Left := UnAllButton.Left + UnAllButton.Width + ScaleX(10);
  InvertButton.Top := Form.ClientHeight - ScaleY(23 + 10);
  InvertButton.Caption := 'Invert';
  InvertButton.OnClick := @InvertOnClick;

  CancelButton := TButton.Create(Form);
  CancelButton.Parent := Form;
  CancelButton.Width := ScaleX(75);
  CancelButton.Height := ScaleY(23);
  CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
  CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
  CancelButton.Caption := 'Cancel';
  CancelButton.ModalResult := mrCancel;
  CancelButton.Cancel := True;

  DelButton := TButton.Create(Form);
  DelButton.Parent := Form;
  DelButton.Width := ScaleX(75);
  DelButton.Height := ScaleY(23);
  DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
  DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
  DelButton.Caption := 'Delete';
  DelButton.ModalResult := mrOk;

  Form.ActiveControl:= CancelButton;

  CheckListBox.AddCheckBox(ExpandConstant('{app}'), '', 0, True, True, False, True, TStringList.Create);
  TStrings(CheckListBox.ItemObject[0]).Text:= ExpandConstant('{app}');
  FillListBox(ExpandConstant('{app}'), '*', 1);

  if Form.ShowModal() = mrOk then  DeleteFiles();
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
    BrowseRemainedFiles();
end;

Последний раз редактировалось Johny777, 15-03-2012 в 14:12.


Отправлено: 13:58, 15-03-2012 | #1112


Пользователь


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

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


Цитата by_gangster:
кто знает, как вставить это в скрипт??? (проигрывание музыки)
Код:
//************************************************ [Начало - Музыка] ***************************************************//
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start: Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
procedure MusicButtonClick(hBtn:HWND);
begin
sndPlaySound(ExpandConstant('{tmp}\Click.wav'), $0001);
if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle)
else if BASS_ChannelIsActive(mp3Handle)=BASS_ACTIVE_PAUSED then BASS_ChannelPlay(mp3Handle, False);
end;
procedure InsertMusic;
begin
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Music.mp3');
MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(717),ScaleY(3),ScaleX(70),ScaleY(52),ExpandConstant( '{tmp}\MusicButton.png'),0,True);
BtnSetEvent(MusicButton,BtnClickEventID,WrapBtnCallback(@MusicButtonClick,1));
BtnSetEvent(MusicButton,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetVisibility(MusicButton,True);
BtnSetCursor(MusicButton,LoadCursorFromFile(ExpandConstant('{tmp}\Cursor2.ani')));
mp3Name:=ExpandConstant('{tmp}\Music.mp3');
BASS_Init(-1,44100,0,0,0);
mp3Handle:=BASS_StreamCreateFile(FALSE,PAnsiChar(mp3Name),0,0,BASS_SAMPLE_LOOP);
BASS_Start;
BASS_ChannelPlay(mp3Handle,False); »
помогите это в скрипт вставить, пожалуйста

Отправлено: 14:17, 15-03-2012 | #1113


Новый участник


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

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


Пожалуйста, помогите решить задачу.

Имеем код:
Код: Выделить весь код
[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={reg:HKLM\SOFTWARE\MyProg\Inform,InstallPath} ; Здесь путь до программной папки
AppVersion=1.1.0.1
UsePreviousAppDir=no
AppendDefaultDirName=no
AllowRootDirectory=yes
DirExistsWarning=no
DisableStartupPrompt=yes
DisableReadyPage=yes
; DisableFinishedPage=yes
DisableDirPage=True
DisableProgramGroupPage=yes
OutputBaseFilename=Setup
Compression=lzma
SolidCompression=no
Uninstallable=false

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

[Files]
Source: {src}\add\*; DestDir: {app}\Serv\Lic\; Flags: external recursesubdirs skipifsourcedoesntexist

[_Code]
function InitializeSetup(): Boolean;
var
  ResultCode: Integer;
  s, ResultStr:string;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\MyProg\Inform')
 then
begin
 MsgBox('Программа не установлена или установлена неверно.' #13#13 'Дальнейшая работа Мастера невозможна.', mbError, mb_Ok);
 Result:=False;
 end
else
    begin
 MsgBox('Программа успешно обнаружена.' #13#13 'Скопируйте дополнения в папку:'+ExpandConstant('{app}')+'\Serv\Lic', mbInformrmation, mb_Ok);
end;
end;
1. Не хочет работать в MsgBox-е ExpandConstant('{app}') . Помогите исправить ошибку.

2. В идеале хотелось бы кое-что усовершенствовать:
вместо последнего простого предложения "скопировать в папку дополнения" в начале проверить, есть ли файлы в папке {src}\add\.
Если эта папка пустая, то предложить (Если "ДА") указать путь до папки с дополнениями или (Если "НЕТ") вывести сообщение (оно в коде уже имеется), т.е. "Скопируйте дополнения в папку {reg:HKLM\SOFTWARE\MyProg\Inform,InstallPath} после установки"

Отправлено: 14:55, 15-03-2012 | #1114


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата vitl:
Не хочет работать в MsgBox-е ExpandConstant('{app}') »
и не будет тк переменная {app} становится известной после страницы выбора директории установки

про указать папку выше пример как делать свою форму с выбором папки

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

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

Отправлено: 14:59, 15-03-2012 | #1115


Новый участник


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

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


Цитата R.i.m.s.k.y.:
и не будет тк переменная {app} становится известной после страницы выбора директории установки »
Хорошо, что дополнить в коде, чтобы {app} определилось?

Отправлено: 15:20, 15-03-2012 | #1116


Аватара для R.i.m.s.k.y.

Ветеран


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

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


vitl, почитать в справке Installation order
по сути: выполнять после страницы wpSelectDir, как вариант проверять на странице wpSelectComponents или повесить на NextButtonClick

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

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

Отправлено: 15:27, 15-03-2012 | #1117


Новый участник


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

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


Стёр везде ковычки. Попробовал прописать полный путь вот так:
Код: Выделить весь код
[Run]
Filename: "{app}\psxfin.exe"; Description: "{cm:LaunchProgram,Spider-Man 2. Enter Electro (PS1)}"; Flags: nowait postinstall skipifsilent
Filename: {sd}\Program Files (x86)\Spider-Man 2. Enter Electro (PS1)\text\Read Me (for 2003).doc; Description: {cm:LaunchProgram,файл с инфой о запуске игры (2003)}; Flags: nowait postinstall skipifsilent
Filename: {sd}\Program Files (x86)\Spider-Man 2. Enter Electro (PS1)\text\Read Me (for 2010).doc; Description: {cm:LaunchProgram,файл с инфой о запуске игры (2010)}; Flags: nowait postinstall skipifsilent
Но теперь новая ошибка -> . Может проблема в флагах?


Кто нибудь знает, как сделать так, чтоб при повторной установке игры (без её удаления), появлялось сообщение об перночальном удалении старых файлов игры? Может об этом где-то написано?

Отправлено: 17:42, 15-03-2012 | #1118


Аватара для Johny777

Ветеран


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

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


Цитата rasim933:
Может проблема в флагах? »
так точно
для документа ворд не хватает флага
писал тебе раньше
Цитата Johny777:
важно в твоём случае ставить флаг (уже стоит) shellexec, тк файл открывается внешней программой типа ворда »
Цитата rasim933:
сообщение об перночальном удалении старых файлов игры? »
не сосем понятно чего ты хочешь.
Сообщение (и не только его) вывести можно, что установлена
или в сообщении написать чтоб удалили?
или чтоб после сообщения вызывался деинсталятор?
Это сообщение посчитали полезным следующие участники:
Показать/скрыть список поблагодаривших

Отправлено: 18:12, 15-03-2012 | #1119


Аватара для R.i.m.s.k.y.

Ветеран


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

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


rasim933, флаг shellexec потерял
написано в шапке - сборник вопросов
Как прогу то будешь определять? Есть ли реперные точки типа значения в реестре или спецфайликов?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

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

Отправлено: 18:24, 15-03-2012 | #1120



Компьютерный форум 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




 
Переход