Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Johny777

Ветеран


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

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


Костя_Антонов@fb, saurn, (не забываем const AppInstallDir... во входных параметрах!), вот апдейт функции
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
AppId=123

DefaultDirName={code:GetPreviousDir}

[Code ]
function GetPreviousDir(const AppInstallDir: String): String;
begin
    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'InstallLocation', Result);
    if Result <> '' then RemoveBackslash(Result) else Result := ExpandConstant('{pf}\My Program');
end;


заместо функции GetPreviousDir(...) проще всего получить пред. путь так:
читать дальше »
Код: Выделить весь код
AppName=My Program
AppVerName=My Program v.1.2

AppId=proto15
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\Source Engine 15}
//DefaultDirName={reg:HKCU\Software\Valve\Steam,SourceModInstallPath|{pf}\valve\steam\SteamApps\SourceMods\Lost Coast}

тут 2 примера (верхний дал когда-то El Sanchez, а нижний выдрал для примера отсюда http://members.home.nl/albartus/issi...cript-1.07.iss ), каждая директива разделена |. Короче говоря, если первого пути который мы получаем из ключа reg:HKCU\Software\Valve\Steam , а в нём из записи SourceModInstallPath вернётся пустая строка '', то будет выведен путь справа от |, те путь по умолчанию
======================================================================

neorom, исправил, улучшил, замени у себя всю секцию кода на эту:

читать дальше »
Код: Выделить весь код
type
  TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);
  
var
  TimerID: LongWord;
  PercentsLabel: TLabel;

function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';

Procedure MyTimerProc(h, msg, idevent, dwTime: Longword);
Begin
  if WizardForm.CurPageID = wpInstalling then with WizardForm.ProgressGauge do PercentsLabel.Caption:= Format('%s'#32'%s', ['Установка игры:', FormatFloat('0.0 %', (Position*100)/Max)]);
End;

procedure DeinitializeSetup();
begin
  KillTimer(0, TimerID);
end;

procedure InitializeWizard();
begin
  PercentsLabel:= TLabel.Create(WizardForm);
  with PercentsLabel do
  begin
    Left:= WizardForm.DirEdit.Left;
    Top:= ScaleY(WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 30);
    Width:= WizardForm.StatusLabel.Width;
    Height:= WizardForm.StatusLabel.Height;
    AutoSize:= False;
    Transparent := True;
    Alignment := taCenter;
    Font.Style:= [fsBold, fsItalic];
    Font.Size:= 14;
    Font.Name:= 'Times New Roman';
    Font.Color:= ClMaroon;
    Parent:= WizardForm.InstallingPage;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then TimerID:= SetTimer(0, 0, 500 {Установка игры}, WrapTimerProc(@MyTimerProc, 4));
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:14, 14-04-2013 | #179