[архив] Inno Setup .:[все вопросы]:.

Ответить
 • Просмотры: 32
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

Цитата Konstantin_555:



как сделать, чтобы программа при деинсталяции спрашивала про необходимость удаления определённого файла?
[архив] Inno Setup .:[все вопросы]:.





Пример




Код:

Код: Выделить всё

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  res: Integer;
begin
  if CurUninstallStep = usAppMutexCheck then begin
    if msgConfirmUninstall then
      if FileExists(ExpandConstant('{app}\MyProg.exe')) then
    case MsgBox('Удалить файл MyProg.exe?.'#13#13 +
        '"Да" – удалить MyProg.exe.' #13#13 +
        '"Нет" – оставить MyProg.exe.', mbInformation, MB_YESNO) of
    IDYES:
      begin
        if not DeleteFile(ExpandConstant('{app}\MyProg.exe')) then
        MsgBox('Немогу удалить файл MyProg.exe...', mbError, MB_OK);
      end;
    IDNO:
      begin
      end;
    end;
  end;
end;
Аватара пользователя
Krekerpro

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Krekerpro »

Может ктонить дать скрипт для распаковки архива free arc'a?
Аватара пользователя
Krekerpro

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Krekerpro »

Цитата Serega:



Цитата Konstantin_555:

как сделать, чтобы программа при деинсталяции спрашивала про необходимость удаления определённого файла? »

Пример
[архив] Inno Setup .:[все вопросы]:.




Спасибо! Отдельный файл удалить удалось..



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


читать дальше »


[Components]

Name: "MainFiles"; Description: "Главные файлы программы"; Types: full compact custom; Flags:fixed

Name: "DBFile"; Description: "Файл базы данных"; Types: full compact

Name: "Templates"; Description: "Шаблоны документов"; Types: full

Name: "OptionFile"; Description: "Файл настроек программы"; Types: full

Name: "ProtocolFile"; Description: "Файл протокола"; Types: full



+В разделе [Files] прописал соответствующие значения.



Как при удалении сделать подобное диалоговое окно? (Т.е. возможность выбора удаляемых компонентов)
Аватара пользователя
Kutsenko Andriy

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Kutsenko Andriy »

Цитата Raf-9600:



для переименования папки "{app}\YourСountry" на английское название текущего языка интерфейса Windows
[архив] Inno Setup .:[все вопросы]:.




Как вы себе это представляете?

Нет, конечно можно оттолкнутся от GetUILanguage, но это придётся в ручную перечислять все языки:


Пример




Код:

Код: Выделить всё

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\{code:YourCountry}
OutputDir=.
Compression=lzma/ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {code:YourCountry}; Flags: ignoreversion
[code]
function YourCountry(AppID: string): string;
begin
  if GetUILanguage = $0419 then Result:= 'Russian' else
  if GetUILanguage = $0409 then Result:= 'English';
end;









Цитата Konstantin_555:



Как при удалении сделать подобное диалоговое окно? (Т.е. возможность выбора удаляемых компонентов)
[архив] Inno Setup .:[все вопросы]:.




Если необходим выбор удаляемых компонентов, то придётся рисовать новую форму, а уже в ней указывать компоненты. Просто насколько знаю, в сообщении нельзя нарисовать чебоксы...
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

Цитата Serega:



Как вы себе это представляете?
[архив] Inno Setup .:[все вопросы]:.




Смутно Изображение

Ну сам Inno видь как-то умеет определять язык винды, и менять в зависимости от этого язык своего интерфейса.

Хотя в принципе, предложенный вам код тоже подходит. Только нужно чтоб он переименовывал уже существующую папку, после инсталляции.



P.S.

А где можно узнать коды языков всех стран?
Аватара пользователя
sanya007

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение sanya007 »

Serega,



Я не много по другому создал батник, и не пришлось ничего прописывать в procedure CurStepChanged





Код:

Код: Выделить всё

procedure BatRunArc(s: string);
var
  bat, a, b, str: string;
  res: Integer;
begin
  bat := ExpandConstant('{tmp}\RunArc.bat');           /// путь откуда запускается батник
  a:=ExpandConstant('{src}')      ////   Назначаем путь для переменной  "A"
  b:=ExpandConstant('{app}')            ////   Назначаем путь для переменной  "B"
  str := str + '@echo off' + #10#13 +
         str + 'Arc x "' + a + '" -y -s2 -dp"' + b + '" >in_log' + #10#13 +    /// Распаковка из переменной "A" в переменную "B"
         str + 'del ' + '"' + bat + '"';   ////  Батник убивает сам себя
  SaveStringToFile(bat, str, False);
  Exec(bat, '', '', SW_HIDE, ewNoWait, res);   ////  Прячем выполнение батника от "Посторонних глаз"
end;
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

Krekerpro, немного иные реализации этих картинок уже есть:



http://s45.radikal.ru/i108/0906/af/141f2f4bf10b.jpg
-
http://shareua.com/get_file/f96e28/2995221


http://s51.radikal.ru/i134/0906/11/b6339d082574.jpg
- сечас поищу.



UPD



Вот он, создал Victor_Dobrov, очистил Serega:


читать дальше »



Код: Выделить всё


var n: Integer; FreeMB, TotalMB: Cardinal; VolumeName, FileSystemName: String; VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint; ListBox: TListBox; StartMenuTreeView: TStartMenuFolderTreeView;

 

const oneMB= 1024*1024;

function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

 

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}

Begin

    if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else

        if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else

            if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else

                If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else

                    If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else

                        Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'

    StringChange(Result, ',', '.')

End;

 

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }

    Begin    while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

 

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}

    Begin

        if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)

        else Result:= String;

    End;

 

Procedure GetDiskInfo(Disk: String);

    Begin

        FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);

            GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);

        FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';

    End;

 

Procedure ListBoxRefresh;    var FreeB, TotalB: Cardinal; Path, String: string; Begin

    ListBox.Items.Clear

for n:= 1 to 31 do    // диск 'А' пропустить

    if (GetLogicalDrives and (1 shl n)) > 0 then

        if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then

            if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');

for n:= 0 to ListBox.Items.Count -1 do begin

    Path:= Copy(ListBox.Items[n],1,2) +'\'        { если в накопителе нет диска, пропустить обновление }

    if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);

        if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);

        if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;

    ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;

End;

 

var baseDisk, baseDir: string;

Procedure ObjectOnClick(Sender: TObject); Begin

Case TObject(Sender) of

    ListBox:    for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then if baseDisk = ListBox.Items[n][1] then WizardForm.DirEdit.Text:= baseDir else WizardForm.DirEdit.Text:= ListBox.Items[n][1] +':\'+ ExtractFileName(WizardForm.DirEdit.Text)

    StartMenuTreeView:    if StartMenuTreeView.Directory  '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'

    WizardForm.NoIconsCheck:    begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;

end; End;

 

Procedure CurPageChanged(CurPageID: Integer);

Begin

    if CurPageID = wpSelectDir then ListBoxRefresh

End;

 

Procedure InitializeWizard;

Begin

    ListBox:= TListBox.Create(WizardForm)

        ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))

        ListBox.Font.Size:= 9

        ListBox.Font.Style:= [fsBold]

        ListBox.Font.Name:= 'Courier New';

        ListBox.OnClick:= @ObjectOnClick;

        ListBox.Parent:= WizardForm.SelectDirPage;

        baseDir:= WizardForm.DirEdit.Text

        baseDisk:= WizardForm.DirEdit.Text[1]

End;
Аватара пользователя
DemonAk

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение DemonAk »

Цитата Raf-9600:



А где можно узнать коды языков всех стран?
[архив] Inno Setup .:[все вопросы]:.




Всех не знаю, но посмотрите файлы в каталоге Inno Setup в папке Languages есть языковые файлы, параметр LanguageID




Цитата Krekerpro:



Мог бы ктонить реализовать вот этот инсталл в cкрипт?
[архив] Inno Setup .:[все вопросы]:.




Посмотрите, этот
скрипт
Аватара пользователя
Krekerpro

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Krekerpro »

Цитата Serega:



Всех не знаю, но посмотрите файлы в каталоге Inno Setup в папке Languages есть языковые файлы, параметр LanguageID
[архив] Inno Setup .:[все вопросы]:.




Пасибо, все необходимые языки нашел.



Немного обмозговал над вашим предыдущим скриптом, в принципе он и в таком виде подходит, но только если скажите что нужно прописать, чтоб распаковать один и тот же файл, в две разные папки. К примеру и в "DestDir: {code:YourCountry}" и в "DestDir: UKEnglsh".
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

Цитата Raf-9600:



один и тот же файл, в две разные папки
[архив] Inno Setup .:[все вопросы]:.




Его просто два раза нужно прописать в секции [Files]:



Код:

Код: Выделить всё

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {code:YourCountry}; Flags: ignoreversion
Source: compiler:Examples\MyProg.exe; DestDir: UKEnglsh; Flags: ignoreversion
Ответить

Вернуться в «Автоматическая установка приложений»