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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Аватара для Johny777

Ветеран


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

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


El Sanchez, К сожалению имеется серьёзная проблема с кодом распаковки архивов 7зип, вылетают ошибки
раньше думал, что конфликт с таймерами (Вин Апи) и с подменённой оконной процедурой (пару страниц назад показывал), но вот убрал их все для теста и ситуация не улучшилась
вот примеры ошибок:

последняя с ошибкой указателя иногда выделяет строку RtlMoveMemory(ei, _lpEis, SizeOf(ei));
также бывает "stack overflow" если раскомментировать PercentsLabel.Caption := FormatFloat('0.#0 %', (dwCurrentSize*100)/ei.dwFileSize); на 4-м скрине
всё крутится вокруг каллбэк функции
Поймать ошибки трудно. Запускал в цикле - 1 устанока = 1, 2 ошибки ингда в начале цикла иногда к 10 - 20 распаковке (цикл длиной от 1 до 30), пару раз из около 10 тестовых установок бывало без ошибки
Признаю: код очень классный и урезать(или даже отказаться от использования) очень трудно
Просьба: Если есть шанс исправить положение, то прошу помочь!

Последний раз редактировалось Johny777, 21-12-2012 в 04:52.


Отправлено: 04:45, 21-12-2012 | #1401



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

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


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

Ветеран


Contributor


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

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


Johny777,
1. Зачем тебе wide string? Передаешь в 7z юникод (кириллицу)? Не выйдет, нужно по-другому: в функциях SevenZipCreateArchive и SevenZipExtractArchive после формирования комстроки s7cmd допиши CharToOemBuff(s7cmd).
2. SevenZipKillOwnerWindowEx(hWnd). К дескриптору какого окна callback привязан? Можешь просто 0 передавать.
3. RtlMoveMemory. Тут по указателю получаем структуру. В момент ошибки _lpEis указывает на невесть что.
4. Встроенный прогресс работает при тех же архивах?
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:43, 21-12-2012 | #1402


Аватара для Johny777

Ветеран


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

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


Цитата El Sanchez:
Зачем тебе wide string »
1. не исключено тк в бэкапере сохранение по умолчанию на рабочий стол и если пользователь обозвал себя русскими буквами то сохранение не работает
также без wide string не идёт распаковка в темп, а она тоже желательна если сохранять архив,
Цитата El Sanchez:
CharToOemBuff(s7cmd). »
сейчас попробую
2. нули и стояли
3. Я читал, что функция малость глючная http://www.delphimaster.net/view/4-1086735785
4. работает, на нём и отображаю

Отправлено: 15:53, 21-12-2012 | #1403


Аватара для Dark_Delphin

Старожил


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

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


Помогите, пожалуйста. Пост #1455

-------
✘ _420.pp_✘


Отправлено: 18:41, 21-12-2012 | #1404


Аватара для Johny777

Ветеран


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

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


Dark_Delphin, проблема была в том, что ты скрыл OuterNotebook на котором лежал InnerNotebook, на котором в свою очередь лежал родной прогрессбар
поправил:
читать дальше »
Код: Выделить весь код
#define MyAppVersion "1.0"

#define NeedInstallSize 90
#define NeedMem 512
#define GameName "MineCraft"
#define GameExeFile "MinecraftLauncher.exe"
#define GameVersion "1.4.5"



[Setup]
AppId={{F5DC10AE-A774-4AB9-9DAE-1BC585C1710B}
AppName={#GameName}
DefaultDirName={userappdata}\.minecraft
AppVersion={#MyAppVersion}
DefaultGroupName=\{#GameName}
WizardImageFile=Files\WizardImage.bmp
SetupIconFile=Files\Ico.ico
DisableDirPage=yes
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes

SolidCompression=yes
Compression=lzma/ultra

[Icons] 
Name: "{userdesktop}\{#GameName}"; Filename: "{app}\{#GameExeFile}"; WorkingDir: "{app}"; Check: "CheckError"; 
Name: "{group}\{#GameName}"; Filename: "{app}\{#GameExeFile}"; WorkingDir: "{app}"; Check: "CheckError"; 
Name: "{group}\Delete"; Filename: "{app}\unins000.exe"; WorkingDir: "{app}"; Check: "CheckError";

[Files]
Source: "Files\unarc.dll"; DestDir: {tmp}; Flags: dontcopy
Source: "Files\ISDone.dll"; DestDir: {tmp}; Flags: dontcopy

Source: "ISSkinU.dll"; DestDir: {app}; Attribs: hidden system
Source: "s.skin"; DestDir: {app}; Attribs: hidden system
Source: {fonts}\*; DestDir: {app}; Flags: external


[  code]
var
  LabelPct, CrackedLabel, StatusLabel: Tlabel;
  ISDoneProgressBar: TNewProgressBar;
  ISDoneCancel:integer;
  ISDoneError:boolean;
  PCFVer:double;

    NewButton1: TNewButton;

const
  PCFonFLY=true;
  notPCFonFLY=false;

 

type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;



  function ReleaseCapture: Longint;
  external 'ReleaseCapture@user32.dll stdcall';


  procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  SendMessage(WizardForm.Handle,$0112,$F012,0);
end;


   procedure NewButton1Click(Sender: TObject);
  begin
    MsgBox(ExpandConstant('{cm:info}')
    , mbInformation, MB_OK);

 //   Caption := ExpandConstant('{cm:NewButton1}');

  end;


procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskinu.dll stdcall delayload setuponly';
 procedure UnloadSkin(); external 'UnloadSkin@files:isskinu.dll stdcall delayload setuponly';

 procedure LoadSkinU(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@{tmp}\isskinu.dll stdcall delayload uninstallonly';
 procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\isskinu.dll stdcall delayload uninstallonly';


function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall'; 
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall'; 

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar.Position := OveralPct;
  LabelPct.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
  Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  ResumeProc;
end;

function CheckError:boolean;
begin                        
  result:= not ISDoneError;
end;


procedure InitializeWizard();
begin
NewButton1 := TNewButton.Create(WizardForm);
    
  

WizardForm.DirEdit.Enabled:=true;
//   WizardForm.DirBrowseButton.Enabled:=false;

  with WizardForm do begin 
    Bevel.Hide;
    OuterNotebook.Hide;
    
    ClientWidth:=300;
    ClientHeight:=400;
    Position:=poScreenCenter;
    Caption:='{#GameName} v{#GameVersion}';
    with WizardBitmapImage do begin 
      Parent:=WizardForm;
      SetBounds(ScaleX(0), ScaleY(0), ScaleX(300), ScaleY(400));
    end;

    WizardBitmapImage.OnMouseDown:=@LabelOnMouseDown;

    with NextButton do begin
      SetBounds(ScaleX(87), ScaleY(50), ScaleX(130), ScaleY(40));
      Cursor := crHand;
     Font.size:=14;
    end;


    with NewButton1 do begin
      Parent := WizardForm;
      SetBounds(ScaleX(87), ScaleY(100), ScaleX(130), ScaleY(40));
      OnClick := @NewButton1Click;
     Caption := ExpandConstant('{cm:NewButton1}');
          Cursor := crHand;
          Font.size:=14;
    end;


     with CancelButton do begin
        
        SetBounds(ScaleX(87), ScaleY(267), ScaleX(130), ScaleY(40));
      Cursor := crHand;
          Font.size:=14;
    end;

     with DirBrowseButton do begin
      Parent:=WizardForm;
      SetBounds(ScaleX(87), ScaleY(150), ScaleX(130), ScaleY(40));
      Cursor := crHand;
          Font.size:=14;
    end;
   
    with DirEdit do begin 
      Parent:=WizardForm;
      SetBounds(ScaleX(87), ScaleY(230), ScaleX(130), ScaleY(40));
      
    end;
  end;        

  
  ISDoneProgressBar:=TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar do begin
    Parent:=WizardForm;
    SetBounds(ScaleX(9), ScaleY(202), ScaleX(280), ScaleY(23));
    Max:=1000;
  end;
  WizardForm.ProgressGauge.Parent := WizardForm;
  WizardForm.ProgressGauge.SetBounds(ScaleX(9), ScaleY(202), ScaleX(280), ScaleY(23));
  WizardForm.ProgressGauge.Hide;
  LabelPct:=TLabel.Create(WizardForm);
  with LabelPct do begin
    Parent:=ISDoneProgressBar;
    AutoSize:=False;
    Transparent:=True;
    Alignment:=taCenter;
    SetBounds(ScaleX(0), ScaleY(4), ScaleX(280), ScaleY(23));
    Font.Style:=[fsBold];
  end;           
  StatusLabel := TLabel.Create(WizardForm);
  with StatusLabel do begin
    Parent:=WizardForm;
    AutoSize:=True;
    Transparent:=True;
    SetBounds(ScaleX(100), ScaleY(225), ScaleX(0), ScaleY(0));
    Caption := ExpandConstant('{cm:unpack}');
    Font.Color:=clWhite;
  end;


   CrackedLabel:=TLabel.Create(WizardForm);
  with CrackedLabel do begin
    Parent:=WizardForm;
    AutoSize:=true;
    Transparent:=True;
    SetBounds(ScaleX(30), ScaleY(195), ScaleX(130), ScaleY(0));
    
    Caption := ExpandConstant('{cm:crack}');
    Font.Color:=clred;
    Alignment:=taCenter;
  end;

    

end;

procedure CurPageChanged(CurPageID: Integer);
begin  
  CrackedLabel.Hide; 
  WizardForm.DirBrowseButton.Hide; WizardForm.DirEdit.Hide;
  ISDoneProgressBar.Hide; StatusLabel.Hide;
  case CurPageID of
    wpWelcome: begin
      CrackedLabel.Show; 
      WizardForm.DirBrowseButton.Show; WizardForm.DirEdit.Show;
    end;
    wpInstalling: begin
      WizardForm.CancelButton.SetBounds(ScaleX(465), ScaleY(202), ScaleX(63), ScaleY(23));
      ISDoneProgressBar.Show; StatusLabel.Show;
    end;
  end; 
end;

function NumToStr(Float: Extended): String;
begin
  Result:= format('%.2n', [Float]); StringChange(Result, ',', '.');
  while (Result[Length(Result)] = '0')or((Result[Length(Result)] = '.')and(Pos('.', Result) > 0)) do
    SetLength(Result, Length(Result)-1);
end;
 
function MbOrTb(Float: Extended): String;
begin
  if Float < 1024 then Result:= NumToStr(Float)+' Мб' else
    if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+' Гб' else
      Result:= NumToStr(Float/(1024*1024))+' Тб';
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  FreeMB, TotalMB: Cardinal;
begin
  Result := True;
  if CurPageID = wpWelcome then begin
    GetSpaceOnDisk(ExtractFileDrive(WizardForm.DirEdit.Text), True, FreeMB, TotalMB);
    if FreeMB<{#NeedInstallSize} then begin
      MsgBox('Недостаточно места на жёстком диске!'#13'Для установки необходимо: '+MbOrTb({#NeedInstallSize})+#13'Свободно '+MbOrTb(FreeMB)+' из '+MbOrTb(TotalMB), mbError, mb_Ok);
      Result := False ;
    end;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  Comps1,Comps2,Comps3, TmpValue:cardinal;
  FindHandle1,ColFiles1,CurIndex1,tmp:integer;
  ExecError:boolean;
  InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  case CurStep of
    ssInstall: begin
      WizardForm.CancelButton.OnClick := @CancelButtonOnClick;
      ISDoneCancel:=0;  
      ExtractTemporaryFile('unarc.dll');

      WizardForm.ProgressGauge.Show;
      Comps1:=0;
      Comps2:=0;
      Comps3:=0;

      ISDoneError:=true;
      if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
        repeat

 ////////////////////////////////////////
  //        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\setup.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
  /////////////////////////////////////////////

          ISDoneError:=false;
        until true;
        ISDoneStop;
      end;
    end;
    ssPostInstall: begin
      if ISDoneError then begin
        StatusLabel.Caption:='Откат изменений...';
        ISDoneProgressBar.Hide;
        Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
      end;
    end;                            
  end; 
end;

procedure InitializeUninstallProgressForm;
begin
   UninstallProgressForm.CancelButton.Hide;
   UninstallProgressForm.Bevel.Hide;
   UninstallProgressForm.Bevel1.Hide;
   UninstallProgressForm.ClientHeight := 100;
   UninstallProgressForm.Position:=poScreenCenter
   UninstallProgressForm.MainPanel.Hide;
   UninstallProgressForm.InnerNotebook.Top:=0
   UninstallProgressForm.InnerNotebook.Left:=0
end;


function InitializeSetup(): Boolean;
 begin
 ExtractTemporaryFile('s.skin');
 LoadSkin(ExpandConstant('{tmp}\s.skin'), '');
 Result:= true
 end;

 function InitializeUninstall(): Boolean;
 begin
 FileCopy(ExpandConstant('{app}\isskinu.dll'),
 ExpandConstant('{tmp}\isskinu.dll'), False);
 FileCopy(ExpandConstant('{app}\s.skin'),
 ExpandConstant('{tmp}\s.skin'), False); LoadSkinU(ExpandConstant('{tmp}\s.skin'), '');
 Result:=True;
 end;

 procedure DeinitializeSetup();
 begin
 UnloadSkin();
 end;

 procedure DeinitializeUninstall();
 begin
 UnloadSkinU();
 end;



[UninstallDelete]
Type: "filesandordirs"; Name: "{app}";

[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "ukr"; MessagesFile: "compiler:Languages\Ukrainian.isl"
Name: "eng"; MessagesFile: "compiler:Languages\English.isl"

Name: "czc"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "ger"; MessagesFile: "compiler:Languages\German.isl"

Name: "jap"; MessagesFile: "compiler:Languages\Japanese.isl"
Name: "pol"; MessagesFile: "compiler:Languages\Polish.isl"








[Messages]
rus.ButtonNext=Ð*аспаковать
rus.ButtonCancel=Выход
rus.ButtonWizardBrowse=Обзор...
rus.SetupAppTitle={#GameName}
               
ukr.ButtonNext=Ð*озпакувати
ukr.ButtonCancel=Вихід
ukr.ButtonWizardBrowse=Огляд...
ukr.SetupAppTitle={#GameName}

eng.ButtonNext=Unpack
eng.ButtonCancel=Exit
eng.ButtonWizardBrowse=Browse...
eng.SetupAppTitle={#GameName}

czc.ButtonNext=Rozbalte
czc.ButtonCancel=Konec
czc.ButtonWizardBrowse=Procházet...
czc.SetupAppTitle={#GameName}

ger.ButtonNext=auspacken
ger.ButtonCancel=Exit
ger.ButtonWizardBrowse=Durchsuchen...
ger.SetupAppTitle={#GameName}

jap.ButtonNext=アンパック
jap.ButtonCancel=終了
jap.ButtonWizardBrowse=参照...
jap.SetupAppTitle={#GameName}

pol.ButtonNex =Rozpakuj
pol.ButtonCancel=Wyjście
pol.ButtonWizardBrowse=PrzeglÄ…daj ...
pol.SetupAppTitle={#GameName}


[CustomMessages]
rus.NewButton1=Прочитай
rus.info= - Упаковал Dark_Delphin;%n - ИП сервера: 46.4.83.69:25586;%n - Форум: torrents-nn.org.ua/forum/26;%n - Скайп: LetsLook1;

ukr.NewButton1=Прочитай
ukr.info= - Упакував Dark_Delphin;%n - ІП сервера: 46.4.83.69:25586;%n - Форум: torrents-nn.org.ua/forum/26;%n - Скайп: LetsLook1;

eng.NewButton1=Read
eng.info= - Packed by Dark_Delphin;%n - ІP server: 46.4.83.69:25586;%n - Forum: torrents-nn.org.ua/forum/26;%n - Skype: LetsLook1;

czc.NewButton1=čÃ*st
czc.info= - Baleno po Dark_Delphin;%n - ІP serveru: 46.4.83.69:25586;%n - Forum: torrents-nn.org.ua/forum/26;%n - Skype: LetsLook1;

ger.NewButton1=Lesen
ger.info= - Verpackt durch Dark_Delphin;%n - ІP server: 46.4.83.69:25586;%n - Forum: torrents-nn.org.ua/forum/26;%n - Skype: LetsLook1;

jap.NewButton1=èª*ã‚€
jap.info= - でランチ Dark_Delphin;%n - ІPサーバー: 46.4.83.69:25586;%n - フォーラãƒ*: torrents-nn.org.ua/forum/26;%n - Skype: LetsLook1;

pol.NewButton1=czytać
pol.info= - pakowane przez Dark_Delphin;%n - ІP serwer: 46.4.83.69:25586;%n - Forum: torrents-nn.org.ua/forum/26;%n - Skype: LetsLook1;

   rus.unpack=Ð*аспаковка...
   ukr.unpack=Ð*озпакування...
   eng.unpack=Unpacking...
   czc.unpack=RozbalenÃ*...
   ger.unpack=Auspacken...
   jap.unpack=解凍...
   pol.unpack=Rozpakowanie...

   rus.crack=!ВНИМАНИЕ!%n Не рекомендуется изменять путь распаковки!
   ukr.crack=!УВАГА!%n Не рекомендується змінювати шлях розпакування!
   eng.crack=!WARNING!%n Avoid changing the way decompress!
   czc.crack=!VAROVÁNÍ!%n VyhnÄ›te se mÄ›nÃ* způsob, jakým rozbalit!
   ger.crack=!WARNUNG!%n Vermeiden Sie das Ändern der Weg zu entpacken!
   jap.crack=! è*¦å‘Šï¼%n 方法は解凍変更することは避けてくã*さい!
   pol.crack=!UWAGA!%n Należy unikać zmiany sposobu dekompresji!

PS: за каракули в коде меня не пинать , так и было

===============================================================================

El Sanchez, добавил CharToOemBuff(s7cmd)
убрал для теста AnsiToDos() из
s7cmd := 'a "' + AnsiToDos(ArchiveFilename) + '" "' + RemoveQuotes(FileList[0]) + '"';
получил
s7cmd := 'a "' + ArchiveFilename + '" "' + RemoveQuotes(FileList[0]) + '"';
всё равно ошибка stack overflow на строке RtlMoveMemory(ei, _lpEis, SizeOf(ei));

также вчера пробовал заменить функцию RtlMoveMemory
на дельфийскую
тк инно ассемблер не может убрал в библиотеку код:
читать дальше »
Код: Выделить весь код
library Memory;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Classes,
  Windows;

{$R *.res}

{ Объявляем функцию }
(* ***** BEGIN LICENSE BLOCK *****
 *
 * The assembly function Move is licensed under the CodeGear license terms.
 *
 * The initial developer of the original code is Fastcode
 *
 * Portions created by the initial developer are Copyright (C) 2002-2004
 * the initial developer. All Rights Reserved.
 *
 * Contributor(s): John O'Harrow
 *
 * ***** END LICENSE BLOCK ***** *)
procedure Move(const Source; var Dest; count : Integer);
{$IFDEF PUREPASCAL}
var
  S, D: PAnsiChar;
  I: Integer;
begin
  S := PAnsiChar(@Source);
  D := PAnsiChar(@Dest);
  if S = D then Exit;
  if Cardinal(D) > Cardinal(S) then
    for I := count-1 downto 0 do
      D[i] := S[i]
  else
    for I := 0 to count-1 do
      D[i] := S[i];
end;
{$ELSE}
asm
  cmp     eax, edx
  je      @@Exit {Source = Dest}
  cmp     ecx, 32
  ja      @@LargeMove {Count > 32 or Count < 0}
  sub     ecx, 8
  jg      @@SmallMove
@@TinyMove: {0..8 Byte Move}
  jmp     dword ptr [@@JumpTable+32+ecx*4]
@@SmallMove: {9..32 Byte Move}
  fild    qword ptr [eax+ecx] {Load Last 8}
  fild    qword ptr [eax] {Load First 8}
  cmp     ecx, 8
  jle     @@Small16
  fild    qword ptr [eax+8] {Load Second 8}
  cmp     ecx, 16
  jle     @@Small24
  fild    qword ptr [eax+16] {Load Third 8}
  fistp   qword ptr [edx+16] {Save Third 8}
@@Small24:
  fistp   qword ptr [edx+8] {Save Second 8}
@@Small16:
  fistp   qword ptr [edx] {Save First 8}
  fistp   qword ptr [edx+ecx] {Save Last 8}
@@Exit:
  ret
  nop {4-Byte Align JumpTable}
  nop
@@JumpTable: {4-Byte Aligned}
  dd      @@Exit, @@M01, @@M02, @@M03, @@M04, @@M05, @@M06, @@M07, @@M08
@@LargeForwardMove: {4-Byte Aligned}
  push    edx
  fild    qword ptr [eax] {First 8}
  lea     eax, [eax+ecx-8]
  lea     ecx, [ecx+edx-8]
  fild    qword ptr [eax] {Last 8}
  push    ecx
  neg     ecx
  and     edx, -8 {8-Byte Align Writes}
  lea     ecx, [ecx+edx+8]
  pop     edx
@FwdLoop:
  fild    qword ptr [eax+ecx]
  fistp   qword ptr [edx+ecx]
  add     ecx, 8
  jl      @FwdLoop
  fistp   qword ptr [edx] {Last 8}
  pop     edx
  fistp   qword ptr [edx] {First 8}
  ret
@@LargeMove:
  jng     @@LargeDone {Count < 0}
  cmp     eax, edx
  ja      @@LargeForwardMove
  sub     edx, ecx
  cmp     eax, edx
  lea     edx, [edx+ecx]
  jna     @@LargeForwardMove
  sub     ecx, 8 {Backward Move}
  push    ecx
  fild    qword ptr [eax+ecx] {Last 8}
  fild    qword ptr [eax] {First 8}
  add     ecx, edx
  and     ecx, -8 {8-Byte Align Writes}
  sub     ecx, edx
@BwdLoop:
  fild    qword ptr [eax+ecx]
  fistp   qword ptr [edx+ecx]
  sub     ecx, 8
  jg      @BwdLoop
  pop     ecx
  fistp   qword ptr [edx] {First 8}
  fistp   qword ptr [edx+ecx] {Last 8}
@@LargeDone:
  ret
@@M01:
  movzx   ecx, [eax]
  mov     [edx], cl
  ret
@@M02:
  movzx   ecx, word ptr [eax]
  mov     [edx], cx
  ret
@@M03:
  mov     cx, [eax]
  mov     al, [eax+2]
  mov     [edx], cx
  mov     [edx+2], al
  ret
@@M04:
  mov     ecx, [eax]
  mov     [edx], ecx
  ret
@@M05:
  mov     ecx, [eax]
  mov     al, [eax+4]
  mov     [edx], ecx
  mov     [edx+4], al
  ret
@@M06:
  mov     ecx, [eax]
  mov     ax, [eax+4]
  mov     [edx], ecx
  mov     [edx+4], ax
  ret
@@M07:
  mov     ecx, [eax]
  mov     eax, [eax+3]
  mov     [edx], ecx
  mov     [edx+3], eax
  ret
@@M08:
  fild    qword ptr [eax]
  fistp   qword ptr [edx]
end;
{$ENDIF}


procedure MoveMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
begin
  Move(Source^, Destination^, Length);
end;

procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
begin
  Move(Source^, Destination^, Length);
end;

procedure FillMemory(Destination: Pointer; Length: DWORD; Fill: Byte);
begin
  FillChar(Destination^, Length, Fill);
end;

procedure ZeroMemory(Destination: Pointer; Length: DWORD);
begin
  FillChar(Destination^, Length, 0);
end;


{ Экспортируем функцию для дальнейшего
  использования программой }
exports
  MoveMemory,
  CopyMemory,
  FillMemory,
  ZeroMemory;


{ Инициализация переменных }
begin

end.

загрузил из библиотеки процедуру, при распаковке архива опять что-то с указателями
но как я понял функции аналогичны, хотя может дело и не в RtlMoveMemory

прикладываю на всякий случай библиотеку, скрипт с импортом функций, исходник библиотеки
процедуры:
procedure MoveMemory(Destination: Pointer; Source: Pointer; Length: DWORD); external 'CopyMemory@files:Memory.dll stdcall';
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD); external 'CopyMemory@files:Memory.dll stdcall';
procedure FillMemory(Destination: Pointer; Length: DWORD; Fill: Byte); external 'CopyMemory@files:Memory.dll stdcall';
procedure ZeroMemory(Destination: Pointer; Length: DWORD); external 'CopyMemory@files:Memory.dll stdcall';

Последний раз редактировалось Johny777, 26-03-2013 в 15:57.

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

Отправлено: 19:38, 21-12-2012 | #1405


Аватара для Dark_Delphin

Старожил


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

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


Johny777, Спасибо.
Ничё страшного, это не проблема)

-------
✘ _420.pp_✘


Отправлено: 20:11, 21-12-2012 | #1406


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


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

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


Доброе время суток назрел очень интересный вопрос.

Сделал репак программы в коде прописал что бы в хост блокировался оф сайт ... но вот в чем проблема программа все ровно проверяет файлы каким образом не знаю. Но что интересное нашел когда при выключенном инете в ручной активации на win 7 в директории C:\ProgramData создается папка моей проги и в ней кидается файл с лицензией и далее все работает ..даже с включеным инетом.

нужный процесс опишу: win 7
Пункты:

1.Запускаем установку выбираем директорию установки по умолчанию (диск "C:\Program Files (x86)") все программа устанавливается копируются ключи реестра и т.д. создается ярлык.
2.Помимо этого хотелось что бы в пути "C:\ProgramData" в которой создалась предварительно папка по пункту "1" еще установился нужный мне файл для активации программы. (файл присутствует в "скрипте" и в программе )

Нужно так что бы этот файл из установленной программы копировался или переместился в указанную мной директорию. "C:\ProgramData"

Я понимаю что это константа для win7 но так же хотелось и узнать код для ХР/Win 8/Vista

читал форум наткнулся на код константы для хр {pf} но так и не понял ....

надеюсь мысль правильно изложил потому как не знаю как это действие называется красиво.

Помогите пожалуйста подскажите код для константы программных файлов для win7/win8/xp/vista

Отправлено: 20:57, 21-12-2012 | #1407


Аватара для Gnom_aka_Lexander

Ветеран


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

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


C:\ProgramData - {localappdata} Для любой системы. просто в ХР и в системах выше ХР она ведет в разные места. но этот путь всегда будет правильным.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Отправлено: 21:06, 21-12-2012 | #1408


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

Ветеран


Contributor


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

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


Цитата Gnom_aka_Lexander:
C:\ProgramData - {localappdata} »
Gnom_aka_Lexander, нет. Правильно будет - {%ALLUSERSPROFILE}
Цитата DEZMONDS:
Помогите пожалуйста подскажите код для константы программных файлов для win7/win8/xp/vista »
DEZMONDS, в справке в разделе Constants найдете описание почти всех констант.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:16, 21-12-2012 | #1409


Аватара для Gnom_aka_Lexander

Ветеран


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

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


El Sanchez, извиняюсь, попутал, имел в виду {commonappdata}...

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Отправлено: 21:19, 21-12-2012 | #1410



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход