PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [23] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

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
Я так думаю он к программе привязан, с реестром тоже самое.
Вот:

vint56
09-04-2015, 00:14
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 для чего? Он вроде не используется...

vint56
09-04-2015, 00:36
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