Костя_Антонов@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;