Katarn
Новичок
Edison007Katarn
Какбы здесь проверка через реестр, а при установке, никакие ключи в реестр не записываются
А где и что прописать нужно чтобы в реестр записывалось?
Edison007Katarn
Какбы здесь проверка через реестр, а при установке, никакие ключи в реестр не записываются
В секции Registry. Ты ведь в скрипте проверяешь наличие ключа в реестре и наличие экзешки в папке установки. То есть сначала создай нужную ветку, закинь экзешку, а потом проверяй.А где и что прописать нужно чтобы в реестр записывалось?
function InitializeSetup: Boolean;
var
path: string;
res: Integer;
begin
Result:= True;
if RegValueExists(HKLM, 'Software\My Program', 'InstallPath') then
if RegQueryStringValue(HKLM, 'Software\My Program', 'InstallPath', path) then
if FileExists(path + '\MyProg.exe') then
if MsgBox('Запустить My Program?', mbConfirmation, MB_YESNO) = IDYES then
begin
Exec(path + '\MyProg.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res);
Result:= False;
end
else Result:= False;
end;[/SOURCE][/MORE] проверки как в Сталкере .
Константа {localappdata} подойдет?Так вот как мне сделать так чтобы взаисимости от OC игру устанавливало в определённую папку или существует какая-то определённая константа в Inno Setup?
В секции Registry. Ты ведь в скрипте проверяешь наличие ключа в реестре и наличие экзешки в папке установки. То есть сначала создай нужную ветку, закинь экзешку, а потом проверяй.
Вот пример[SOURCE="iss"][Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon
[Run]
Filename: "{app}\MyProg.exe"; Description: "{cm:LaunchProgram,My Program}"; Flags: nowait postinstall skipifsilent
[Registry]
Root: HKLM; Subkey: Software\My Program; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey
Код:function InitializeSetup: Boolean; var path: string; res: Integer; begin Result:= True; if RegValueExists(HKLM, 'Software\My Program', 'InstallPath') then if RegQueryStringValue(HKLM, 'Software\My Program', 'InstallPath', path) then if FileExists(path + '\MyProg.exe') then if MsgBox('Запустить My Program?', mbConfirmation, MB_YESNO) = IDYES then begin Exec(path + '\MyProg.exe', '', '', SW_SHOW, ewWaitUntilTerminated, res); Result:= False; end else Result:= False; end;[/SOURCE][/MORE] проверки как в Сталкере .[/QUOTE] С этим кодом всё равно при установленной игре, и повторном нажатии на [B]setup.exe[/B], происходит установка игры. Вот с этим кодом всё норм [ADMIN="YURSHAT"]Код который я дал рабочий на 100%. Попробуй скомпиль (без изменений) и запусти. Ты где то косякнул просто.[/ADMIN] [SPOILER="Код"][Code] var AppDir: string; ResultCode: Integer; procedure ReadEntries(); begin RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\GSC Game World\STALKER-SHOC', 'InstallPath', AppDir); end; function InitializeSetup(): Boolean; var Exe, AppDir: string; ResultCode: Integer; begin Exe:='\bin\XR_3DA.exe'; if (RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\GSC Game World\STALKER-SHOC', 'InstallPath')) then begin ReadEntries; case (MsgBox('Игра S.T.A.L.K.E.R. уже найдена на Вашем компьютере. Запустить игру?', mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON3)) of IDYES: begin if (FileExists(AddBackslash(AppDir) + Exe)) then begin Exec(AddBackslash(AppDir) + Exe, '', ExtractFilePath(AddBackslash(AppDir) + Exe), SW_SHOW, ewNoWait, ResultCode); end else begin MsgBox('Невозможно запустить S.T.A.L.K.E.R., т.к. исполняемый файл программы не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1); end Result:=False; end IDNO: begin Result:=True; end IDCANCEL: begin Result:=False; end end end else begin Result:=True; end end;[/SPOILER] Проверено.
Это как? Кусками что ли? Типа бегущего пб?Как можно сделать отображение пб блоками?
Edison007KorwiN
Сделай через таймер
type
TCallbackProc = procedure (Sender: TObject);
function WndProcCallBack(P:TCallbackProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall delayload';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
procedure Timer(Sender: TObject);
begin
WizardForm.ComponentsList.Top:=WizardForm.ComponentsList.Top + 48;
if WizardForm.ComponentsList.Top > 10 then
KillTimer(WizardForm.Handle, 1);
end;
....
SetTimer(WizardForm.Handle, 1, 1, WndProcCallBack(@Timer, 0))
...
Блин не получается(KorwiN
Как-то так
Код:type TCallbackProc = procedure (Sender: TObject); function WndProcCallBack(P:TCallbackProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall delayload'; function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall'; function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall'; procedure Timer(Sender: TObject); begin WizardForm.ComponentsList.Top:=WizardForm.ComponentsList.Top + 48; if WizardForm.ComponentsList.Top > 10 then KillTimer(WizardForm.Handle, 1); end; .... SetTimer(WizardForm.Handle, 1, 1, WndProcCallBack(@Timer, 0)) ...
Еще раз пожалуйста и по человечески...Как сделать в ключить в одну сообщение Путь установки и нужное место в ГБ жырним шрифтом, но остальние слова без Ж? (как у гог.ком)
В скрипте от Каталистов не совсем то...