Я использую Inno Setup для изменения корзины в ОС. Мне нужно сделать некоторые случаи, если пользователь работает под управлением Windows 7 или Windows XP. Я пытаюсь использовать:
Но похоже, что он не может найти imageres.dll или shell32.dll даже хотя я проверял, что они существуют. Что я делаю неправильно? Или я могу проверить версию Windows по-другому?
Источник Размещён: 17.05.2019 03:28
Ответы (3)
7 плюса
Вы должны использовать эту GetWindowsVersionEx функцию. Он заполняет TWindowsVersion запись:
Существует множество других связанных функций. См. Ниже «Системные функции» на этой странице .
6 плюса
Согласно документации , параметры, связанные с каждым файлом, могут быть напрямую привязаны к версии ОС:
«0» означает никогда не устанавливать; «1» означает установку на любую версию (то есть версию 1.0 или новее).
Примечание. Вышеупомянутый метод не ограничивается секцией [Files]; MinVersion и OnlyBelowVersion могут использоваться в большинстве разделов.
Автор: wallyk Размещён: 01.05.2011 06:44
5 плюса
В большинстве разделов программы установки Inno (как [Files] , [Tasks] , [Run] и т.д.) , вы можете использовать MinVersion и OnlyBelowVersion общие параметры .
В сценарии Pascal используйте эту GetWindowsVersionEx функцию, чтобы найти номер версии Windows. Затем сравните номер с определенным номером версии Windows .
Вот несколько удобных функций для проверки конкретных версий Windows:
Чтобы проверить серверные выпуски Windows, см.: Проверка на наличие Windows Server 2003
Inno setup определить версию windows
Сообщения: 222 Благодарности: 19
Конфигурация компьютера
Материнская плата: Asus P5B Deluxe
HDD: Toshiba HDTS212EZSTA, Seagate 500Gb
Звук: Creative Audigy SE
CD/DVD: SAMSUNG SH-224BB
ОС: Windows 8.1 x64, Windows 10 x64
С первой проблемой разобрался путём замены дистрибутива .Net с версии 4.0 на 3.5, которая, в отличие от 4.0, сама проверяет наличие установленной в системе версии .Net Framework и не устанавливает повторно то, что уже есть. Serega, приведённый код на Seven работает некорректно, в указанной ветке реестра на чистой системе есть только v2.0, хотя в системе установлена v3.5.
По второму вопросу полноценный прогрессбар сделать не получится, поэтому придётся довольствоваться фейковым, как при установке IE. Где найти код для него и как «прикрутить» его к секции Run? У меня сейчас уже задействован код для отображения процентов при распаковке всех файлов моего дистрибутива, поэтому нужно соединить обе части кода, первую привожу:
[Code_] < RedesignWizardFormBegin >// Не удалять эту строку! // Не изменять эту секцию. Она создана автоматически. procedure RedesignWizardForm; begin with WizardForm.BeveledLabel do begin Color := cl3DLight; Font.Height := -13; ParentColor := False; ParentFont := False; Left := ScaleX(10); Height := ScaleY(17); end;
< ReservationBegin > // Вы можете добавить ваш код здесь.
< ReservationEnd > end; // Не изменять эту секцию. Она создана автоматически. < RedesignWizardFormEnd >// Не удалять эту строку!
function InitializeSetup(): Boolean; begin ExtractTemporaryFile(‘Codejock.cjstyles’); CreateDir(ExpandConstant(‘\ISSkin’)); FileCopy(ExpandConstant(‘\Codejock.cjstyles’), ExpandConstant(‘\ISSkin\Codejock.cjstyles’), True); LoadSkin(ExpandConstant(‘\ISSkin\Codejock.cjstyles’), ‘NormalBlack.ini’);
Result := True; end;
function InitializeUninstall(): Boolean; begin FileCopy(ExpandConstant(‘\isskin.dll’), ExpandConstant(‘\isskin.dll’), True); FileCopy(ExpandConstant(‘\Codejock.cjstyles’), ExpandConstant(‘\Codejock.cjstyles’), True);
LoadSkinUninst(ExpandConstant(‘\Codejock.cjstyles’), ‘NormalBlack.ini’); Result := True; end;
procedure DeinitializeUninstall(); begin UnloadSkinUninst(); end;
function BASS_Start(): Boolean; external ‘BASS_Start@files:BASS.dll stdcall delayload’;
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external ‘BASS_ChannelPlay@files:BASS.dll stdcall delayload’;
function BASS_Stop(): Boolean; external ‘BASS_Stop@files:BASS.dll stdcall delayload’;
function BASS_Free(): Boolean; external ‘BASS_Free@files:BASS.dll stdcall delayload’;
procedure InitializeWizard(); var Name1: string; i: Integer; begin RedesignWizardForm; ////////////////// Spalsh ////////////////////// ExtractTemporaryFile(‘Splash.png’); ShowSplashScreen(WizardForm.Handle,ExpandConstant(‘‘)+’\Splash.png’,1000,3000,1000,0,255,False, $FFFFFF,10); ///////////////// Splash /////////////////////// ExtractTemporaryFile(‘bass.dll’); ExtractTemporaryFile(‘sound.mp3’); if BASS_Init(-1, 44100, 0, 0, 0) then begin BASS_Start(); Name1:=ExpandConstant(‘\sound.mp3′); i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4); if i <> 0 then begin BASS_ChannelPlay(i, True); end; end; end;
procedure DeInitializeSetup(); begin //////////// ISSkin ShowWindow(StrToInt(ExpandConstant(‘‘)), 0); UnloadSkin(); DeleteFile(ExpandConstant(‘\ISSkin\isskin.dll’)); DeleteFile(ExpandConstant(‘\ISSkin\Codejock.cjstyles’)); RemoveDir(ExpandConstant(‘\ISSkin’)); //////////// ISSkin BASS_Stop(); //нужно для остановки проигрывания BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом end;
procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssDone then MsgBox(‘Программа ‘ + ‘<#SetupSetting("AppName")>‘ + ‘ установлена!’, mbInformation, MB_OK); end;