Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
Dodakaedr
07-04-2015, 16:59
Как в зависимости от ОС показывать\скрывать элемент? В данном случаи чекбокс:
[Setup]
appname=app
appversion=1.0
DefaultDirName={pf}\app
[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
VER_PLATFORM_WIN32_NT = 2;
type
_OSVERSIONINFOEX = record
dwOSVersionInfoSize: DWORD;
dwMajorVersion: DWORD;
dwMinorVersion: DWORD;
dwPlatformId: DWORD;
wServicePackMajor: WORD;
end;
var
Taskbar: TCheckBox;
function GetVersionEx( var lpVersionInformation: _OSVERSIONINFOEX ): BOOL; external 'GetVersionEx{#A}@kernel32.dll stdcall';
function IsWindowsXp( ): Boolean;
var
osviEx: _OSVERSIONINFOEX;
begin
osviEx.dwOSVersionInfoSize := SizeOf( osviEx );
if ( not GetVersionEx( osviEx ) ) then
Exit;
Result := ( ( osviEx.dwPlatformId = VER_PLATFORM_WIN32_NT ) and
( osviEx.dwMajorVersion = 5 ) and
( osviEx.dwMinorVersion = 1 ) and
( osviEx.wServicePackMajor = 3 ) );
end;
procedure TaskbarCreate();
begin
Taskbar := nil;
if not IsWindowsXp then
begin
Taskbar := TCheckBox.Create(nil);
with Taskbar do
begin
Parent := WizardForm.WelcomePage;
SetBounds(ScaleX(185), ScaleY(251), ScaleX(104), ScaleY(15));
Caption := 'Раздача';
end;
end;
end;
procedure InitializeWizard();
begin
TaskbarCreate;
end;
Задача: не показывать чекбокс если оперативная система XP.
El Sanchez
08-04-2015, 09:25
Задача: не показывать чекбокс если оперативная система XP. »
Dodakaedr,
var
Taskbar: TCheckBox;
procedure TaskbarCreate;
begin
Taskbar := TCheckBox.Create(WizardForm);
with Taskbar do
begin
Parent := WizardForm.WelcomePage;
SetBounds(ScaleX(185), ScaleY(251), ScaleX(104), ScaleY(15));
Caption := 'Раздача';
Visible := (GetWindowsVersion > $06000000);
end;
end;
///////////////////////////
procedure InitializeWizard;
begin
TaskbarCreate;
end;
AlekseyPopovv
08-04-2015, 19:09
Как скрыть окошко в конце деинсталляции: "UninstalledAll=Программа %1 была полностью удалена с вашего компьютера."?
И ещё: вот так вот удаляется папка "DelTree(ExpandConstant('{localappdata}\Temp\CacheProgram'), True, True, True);"
а так нет "DelTree(ExpandConstant('{tmp}\CacheProgram'), True, True, True);". Почему не понятно!
Dodakaedr
08-04-2015, 20:03
Как скрыть окошко в конце деинсталляции »
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DisableFinishedPage=yes
OutputDir=.
[Languages]
Name: RUS; MessagesFile: "compiler:Languages\Russian.isl"
[Code]
function InitializeUninstall:boolean;
var
rcode: Integer;
begin
Result:= False;
if not UninstallSilent then
begin
Exec(ExpandConstant('{uninstallexe}'), '/SILENT', '', SW_SHOW, ewNoWait, RCode);
Exit;
end;
if MsgBox('удалить программу?', mbConfirmation, MB_YESNO) = IDYES then
begin
Result := True;
end;
if not UninstallSilent then
begin
Exec(ExpandConstant('{uninstallexe}'), '/SILENT', '', SW_SHOW, ewNoWait, RCode);
Exit;
end;
end;
Почему не понятно! »
Потому что {localappdata}\Temp\CacheProgram это C:\Users\Admin\AppData\Local\Temp\CacheProgram, а {tmp}\CacheProgram:{tmp}
Временная папка. Это не значение переменной среды TEMP пользователя. Это папка, где создаются временные файлы инсталлятора ("C:\WINDOWS\TEMP\IS-xxxxx.tmp"). Все файлы и папки удаляются из папки Temp после завершения установки приложения. Эта константа используется в случае, если в секции [Run] указаны файлы, необходимые при инсталляции, но не нужные для дальнейшей работы приложения.
AlekseyPopovv
08-04-2015, 22:50
В системе имеется файл "Config.ini" с таким содержимым:
[General]
Language=Russian
Как мне в эту секцию дописать:
Key=123
и сохранить файл в таком виде:
[General]
Language=Russian
Key=123
Пробовал так, но результат не тот:
if FileExists(ExpandConstant('{win}\Config.ini')) then
SetIniString('Gereral', 'Key', '123', ExpandConstant('{win}\Config.ini'));
Получается:
[General]
Language=Russian
[General]
Key=123
Помогите.
Dodakaedr
08-04-2015, 22:59
В системе имеется файл "Config.ini" с таким содержимым:
[General] »
В файле General а вы пишите SetIniString('Gereral', 'Key', '123', ExpandConstant('{win}\Config.ini')); вот и не стыковка.
AlekseyPopovv
08-04-2015, 23:12
Исправил, но всё равно создаёт вторую такую же секцию. Я где то раньше видел пример, теперь не могу найти.
Dodakaedr
08-04-2015, 23:18
Исправил, но всё равно создаёт вторую такую же секцию »
Скопируйте слово General с файла и вставьте в скрипт, потому что все работает.Положите файл Config.ini радом с исталлом
[General]
Language=Russian
[Setup]
appname=appppp
AppVersion=1.0
DefaultDirName={pf}\appppp
OutputDir=.
[code]
procedure InitializeWizard();
begin
if FileExists(ExpandConstant('{src}\Config.ini')) then
SetIniString('General', 'Key', '123', ExpandConstant('{src}\Config.ini'));
end;
AlekseyPopovv
08-04-2015, 23:23
Попробовал. Создал новый другой файл .ini всё сработало, а у того файла видать особенность такая!
Добавил другие параметры, он их удалил сам. Короче файл шифрованный.
Dodakaedr
08-04-2015, 23:30
Короче файл шифрованный. »
Скиньте его посмотрим что за файл такой. Возможно на нем атрибут стоить только чтение.
AlekseyPopovv
08-04-2015, 23:40
Я так думаю он к программе привязан, с реестром тоже самое.
Вот:
AlekseyPopovv, а так попробуй
var
s: String;
procedure CurStepChanged(CurStep: TSetupStep);
begin
s:= + 'General' + #13#10 + 'Language = Russian' + #13#10 + 'General'+ #13#10 +'Key = 123 ' + #13#10;
case CurStep of
ssPostInstall: SaveStringToFile(ExpandConstant('{win}\Config.ini'), s, False);
end;
end;
Dodakaedr
09-04-2015, 00:28
vint56, s0 для чего? Он вроде не используется...
Dodakaedr, я правил свой пример не все убрал
AlekseyPopovv
09-04-2015, 01:00
Так заработало, только всё что там было перезаписалось. Надо как то дописать, там всего одна секция, других нет. Нужно просто в конце файла дописать Language=Russian
Вместо False ставим True и всё дописывает! Ура!
AlekseyPopovv
09-04-2015, 11:33
Dodakaedr, vint56, спасибо за помощь, с другими файлами всё работает.
dracosha
09-04-2015, 18:42
AlekseyPopovv, Леш ну вот зачем флудить? Тебе несколько человек старались помочь. Неужели так сложно нажать на Полезное сообщение?
AlekseyPopovv
09-04-2015, 20:32
dracosha, Я редактировал своё сообщение, которое уже было не актуальным. А теперь по делу.
Я создал новую страницу "CreateCustomPage", как сделать что бы она отображалась только при выборе "Portable" версии?
kotyarko@fb
09-04-2015, 20:43
Я создал новую страницу "CreateCustomPage", как сделать что бы она отображалась только при выборе "Portable" версии? »
Например:...
if Portable.Checked then
begin
Page := CreateCustomPage....
...
end;
А вот откуда это выполнять зависит от того, где предоставляется выбор Portable-версии.
AlekseyPopovv
09-04-2015, 20:49
kotyarko@fb, То есть где предоставляется выбор Portable-версии?
Эти функции выше
function InstallerCheck: Boolean;
begin
Result := Installer.Checked;
end;
function PortableCheck: Boolean;
begin
Result := Portable.Checked;
end;
Как мне быть?
Понял, да эта страница после выбора портабле...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.