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

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

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение El Sanchez »

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 тестовых установок бывало без ошибки

Признаю: код очень классный и урезать(или даже отказаться от использования) очень трудно

Просьба: Если есть шанс исправить положение, то прошу помочь!
Аватара пользователя
DEZMONDS

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение DEZMONDS »

Подскажите я сделал репак программки сохранил все пути и данные но программа после запуска начинает проверять свой ключ на оф сайте тобиш подлинность если заблокировать доступ в инет срабатывает кряк и программа дальше запускается и работает ...



возможно есть функция или скрипт inno setup что сама по себе блокирует все соединения из вне ..в инет .. или подскажите где посмотреть или как сделать если есть ...



Изображение мне нужно не вручную а автоматом и не через антивирус ...как делает это skidrow в своих крЯках.... зарание спасибо...
Аватара пользователя
SoulSide

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение SoulSide »

Цитата El Sanchez:



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




1. не исключено тк в бэкапере сохранение по умолчанию на рабочий стол и если пользователь обозвал себя русскими буквами то сохранение не работает

также без wide string не идёт распаковка в темп, а она тоже желательна если сохранять архив,


Цитата El Sanchez:



CharToOemBuff(s7cmd).
Скрипты Inno Setup. Помощь и советы [часть 5]




сейчас попробую

2. нули и стояли

3. Я читал, что функция малость глючная
http://www.delphimaster.net/view/4-1086735785


4. работает, на нём и отображаю
Аватара пользователя
DEZMONDS

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение DEZMONDS »

SoftLine, да но мне взлом не нужен мне надо что бы в скрипте inno setup прописать как ты говоришь в файле hosts запрет програмы или копирнуть этот хост и как на различные системы винды указать путь? антивирус наверно сразу орать будет что типа репак лезет в запрещенные файлы... и воозможно это сделать автоматом? или подскажите в правельном направлении думаю? через inno setup это делать или кряк дописивать?
Аватара пользователя
YURSHAT

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение YURSHAT »

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('Ð&#157;едоÑ&#129;таточно меÑ&#129;та на жёÑ&#129;тком диÑ&#129;ке!'#13'ДлÑ&#143; уÑ&#129;тановки необходимо: '+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=Ð*аÑ&#129;паковать
rus.ButtonCancel=Выход
rus.ButtonWizardBrowse=Обзор...
rus.SetupAppTitle={#GameName}
ukr.ButtonNext=Ð*озпакувати
ukr.ButtonCancel=Вихід
ukr.ButtonWizardBrowse=ОглÑ&#143;д...
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=å&#143;‚ç…§...
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 - ИП Ñ&#129;ервера: 46.4.83.69:25586;%n - Форум: torrents-nn.org.ua/forum/26;%n - Скайп: LetsLook1;
ukr.NewButton1=Прочитай
ukr.info= - Упакував Dark_Delphin;%n - ІП Ñ&#129;ервера: 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=Ä&#141;Ã*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= - ã&#129;§ãƒ©ãƒ³ãƒ&#129; Dark_Delphin;%n - ІPサーãƒ&#144;ー: 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=Ð*аÑ&#129;паковка...
   ukr.unpack=Ð*озпакуваннÑ&#143;...
   eng.unpack=Unpacking...
   czc.unpack=RozbalenÃ*...
   ger.unpack=Auspacken...
   jap.unpack=è§£å‡&#141;...
   pol.unpack=Rozpakowanie...
   rus.crack=!Ð’Ð&#157;ИМÐ&#144;Ð&#157;ИЕ!%n Ð&#157;е рекомендуетÑ&#129;Ñ&#143; изменÑ&#143;ть путь раÑ&#129;паковки!
   ukr.crack=!УВÐ&#144;ГÐ&#144;!%n Ð&#157;е рекомендуєтьÑ&#129;Ñ&#143; змінювати шлÑ&#143;Ñ… розпакуваннÑ&#143;!
   eng.crack=!WARNING!%n Avoid changing the way decompress!
   czc.crack=!VAROVÃ&#129;NÃ&#141;!%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=! è*¦å‘Šï¼&#129;%n 方法ã&#129;¯è§£å‡&#141;変更ã&#129;™ã‚‹ã&#129;“ã&#129;¨ã&#129;¯é&#129;¿ã&#129;‘ã&#129;¦ã&#129;&#143;ã&#129;*ã&#129;•ã&#129;„ï¼&#129;
   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';
Аватара пользователя
DEZMONDS

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение DEZMONDS »

YURSHAT, да я понял ... но все же только вручную? или можно как то через скрипт инно?
Аватара пользователя
DEZMONDS

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение DEZMONDS »

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



Сделал репак программы в коде прописал что бы в хост блокировался оф сайт ... но вот в чем проблема программа все ровно проверяет файлы каким образом не знаю. Но что интересное нашел когда при выключенном инете в ручной активации на 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
Аватара пользователя
SoulSide

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение SoulSide »

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

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Gnom_aka_Lexander »

Цитата Gnom_aka_Lexander:



C:\ProgramData - {localappdata}
Скрипты Inno Setup. Помощь и советы [часть 5]




Gnom_aka_Lexander, нет. Правильно будет - {%ALLUSERSPROFILE}


Цитата DEZMONDS:



Помогите пожалуйста подскажите код для константы программных файлов для win7/win8/xp/vista
Скрипты Inno Setup. Помощь и советы [часть 5]




DEZMONDS, в справке в разделе Constants найдете описание почти всех констант.
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение R.i.m.s.k.y. »

inno умеет только bmp в формы вставлять? как быть с прозрачностью фона, ведь у каждого своя тема оформления венды и установщика?
Ответить

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