PDA

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


Страниц : 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

Dodakaedr
14-09-2014, 23:16
Если есть готовый код , дайте пожалуйста »
Вот держите Bass Module (http://rghost.ru/private/58018382/ddc92f8c9fd05fe4b01212029375b0e1)

Nightwishh
15-09-2014, 00:46
А можно перенести всю информацию из WizardForm.StatusLabel на свой лейбл?Label1.Caption:= WizardForm.StatusLabel.Captionнеподойдёт т.к. кроме рапаковки архивов из секции кода, туда выводятся сообщения из секции [RUN] и [Icons] и т.д. С нетерпением жду ответа, Спасибо...

saurn
15-09-2014, 02:49
А можно перенести всю информацию из WizardForm.StatusLabel на свой лейбл? »
Можно так, например:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application


[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external;


[Code]
#define A = (Defined UNICODE) ? "W" : "A"

const
GWL_WNDPROC = -4;
WM_PAINT = $000F;


type
WPARAM = Integer;
LPARAM = Integer;
LRESULT = Integer;
TFNWndProc = Integer;


function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint;
external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
external 'CallWindowProc{#A}@user32.dll stdcall';


var
OldStaticProcAddr: Longint;


function StaticWindowdProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
var
_String: String;
begin
if Msg = WM_PAINT then
begin
_String := WizardForm.StatusLabel.Caption
WizardForm.Caption := _String; //для теста
end;

Result:= CallWindowProc(OldStaticProcAddr, hWnd, Msg, wParam, lParam);
end;


procedure InitializeWizard();
begin
OldStaticProcAddr := SetWindowLong(WizardForm.StatusLabel.Handle, GWL_WNDPROC, CallbackAddr('StaticWindowdProc'));
end;


procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.StatusLabel.Handle, GWL_WNDPROC, OldStaticProcAddr);
end;

Nordek
15-09-2014, 08:08
Если есть готовый код , дайте пожалуйста , а то уже листать устал 3 часа глаза как у рака. »#1905 (http://forum.oszone.net/post-2292520-1905.html)

Irenis
15-09-2014, 14:05
Добрый день :) Подскажите пожалуйста, есть ли такой код, который бы запрещал изменять путь установки программы? Мне нужно создать установщик, который бы установил программу именно туда, куда я укажу, а конкретнее в C:\ProgramData. Можно ли это как то осуществить? Спасибо.

Shkutu
15-09-2014, 14:40
Irenis, если вообще не выводить страницу выбора пути установки
[Setup]
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=yes
Ну а если выводить, то

[Setup]
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=no

[Сode]
procedure InitializeWizard;
begin
WizardForm.DirEdit.enabled:=false;
end;

ispolin
15-09-2014, 15:35
Подскажите как реализовать в Inno
нужно, чтобы после окна выбора компонентов появлялось окно для записи пользовательских данных в определённую ветку реестра
на подобии
http://i64.fastpic.ru/big/2014/0915/4b/eaa87b6c8ffacc223c563069ff38b34b.jpg

Irenis
15-09-2014, 16:12
Shkutu, спасибо :) А какой код прописать, чтобы программа автоматически установилась по пути C:\ProgramData?

Nordek
15-09-2014, 16:20
Irenis,
Вариант 1
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Code]
procedure InitializeWizard();
begin
WizardForm.DirBrowseButton.Enabled := False;
WizardForm.DirEdit.Enabled := False;
end;

Вариант 2
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Files]
; ** Назначение установки основной программы по-умолчанию (с возможностью выбора каталога для установки) **
; Пример для файла:
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
; Пример для целой папки:
Source: compiler:Examples\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
;+
; ** Неизменное назначение установки в Program Data (без возможности выбора каталога, жёсткое привязывание назначения для копирования содержимого) **
; Пример для файла:
Source: compiler:Examples\MyProg.exe; DestDir: {commonappdata}\My Program; Flags: ignoreversion
; Пример для целой папки:
Source: compiler:Examples\*; DestDir: {commonappdata}\My Program; Flags: ignoreversion recursesubdirs createallsubdirs


ispolin, UserInfoPage=true т.е

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UserInfoPage=true

ispolin
15-09-2014, 16:42
Nordek, не то...
я могу конечно жёстко прописать через скрипт
[Registry]
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegOrg; ValueData: Comp
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegUser; ValueData: User

однако хочется предоставить конечному пользователю самому решать, что туда занести т.е нужно окно для ввода данных

Shkutu
15-09-2014, 17:10
автоматически установилась по пути C:\ProgramData »
просто поменяйте значение DefaultDirName на тот путь, который нужен

[Setup]
DefaultDirName=C:\ProgramData
DisableDirPage=yes
Во втором варианте (с выводом страницы) аналогично.
ispolin, попробуйте что-то вроде

[Registry]
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegOrg; ValueData:{code:GetRegData|RegOrg}
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegUser; ValueData: {code:GetRegData|RegUser}

[Сode]
function GetRegData(param:string):string;
begin
case param of
'RegOrg': result:=UserDataPage.values[0];
'RegUser': result:=UserDataPage.values[1];
end;
end;

procedure InitializeWizard;
begin
UserDataPage:=CreateInputQueryPage(ReportServerDataPage.id,
'Данные организации', 'Введите данные организации',
'Введите данные организации');
UserDataPage.Add('Организация', false);
UserDataPage.Add('Пользователь', false);
end;

saurn
15-09-2014, 17:42
ispolin
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UserInfoPage=true
DefaultUserInfoName=
DefaultUserInfoOrg=


[Registry]
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegOrg; ValueData: {code:SetUserInfo|user};
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegUser; ValueData: {code:SetUserInfo|org};


[Code]
function SetUserInfo( const Value: String ): String;
begin
case Value of
'user': Result := WizardForm.UserInfoNameEdit.Text;
'org': Result := WizardForm.UserInfoOrgEdit.Text;
end;
end;

ispolin
15-09-2014, 17:51
Shkutu,
http://i63.fastpic.ru/big/2014/0915/35/07a038849cfe8d973e1cb4ea46d80435.jpg

saurn, окошко вообще не появилось для ввода данных

saurn
15-09-2014, 17:56
ispolin, переменная UserDataPage не определена. Добавьте в начало секции Code
var
UserDataPage: TInputQueryWizardPage;

ispolin
15-09-2014, 18:21
saurn, дальше..

http://i67.fastpic.ru/big/2014/0915/7a/0b87ec7bac0c76c04bfa10f64fbe207a.jpg

saurn
15-09-2014, 18:42
ispolin, вместо ReportServerDataPage укажите ID страницы, после которой необходимо отобразить вашу кастомную страницу:
UserDataPage:=CreateInputQueryPage(wpSelectComponents,
'Данные организации', 'Введите данные организации',
'Введите данные организации');

Nordek
15-09-2014, 18:45
ispolin,
[Setup]
AppName=My Program
AppPublisher=My Company
AppVersion=1.0
DefaultDirName={pf}\My Program

[Registry]
Root: HKCU; SubKey: Software\{#SetupSetting("AppName")}\{#SetupSetting("AppPublisher")}; ValueType: string; ValueName: UserName; ValueData: {code:SetUser}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\{#SetupSetting("AppName")}\{#SetupSetting("AppPublisher")}; ValueType: string; ValueName: Organization; ValueData: {code:SetOrg}; Flags: uninsdeletevalue uninsdeletekeyifempty

[CustomMessages]
Caption=Заголовок
Description=Описание
User=&Имя пользователя:
Organization=&Организация:

[Code]
var
UserPage: TWizardPage;
UserNameLabel, OrganizationLabel: TLabel;
UsernameEdit, OrganizationEdit: TNewEdit;

procedure InitializeWizard();
begin
UserPage := CreateCustomPage(wpInfoBefore, ExpandConstant('{cm:Caption}'), ExpandConstant('{cm:Description}'));

UserNameLabel := TLabel.Create(WizardForm);
with UserNameLabel do
begin
Parent := UserPage.Surface;
Caption := ExpandConstant('{cm:User}');
Transparent := False;
Left := ScaleX(16);
Top := ScaleY(40);
end;

OrganizationLabel := TLabel.Create(WizardForm);
with OrganizationLabel do
begin
Parent := UserPage.Surface;
Caption := ExpandConstant('{cm:Organization}');
Transparent := False;
Left := ScaleX(16);
Top := ScaleY(96);
end;

UsernameEdit := TNewEdit.Create(WizardForm);
with UsernameEdit do
begin
Parent := UserPage.Surface;
Left := ScaleX(16);
Top := ScaleY(56);
Width := ScaleX(385);
Height := ScaleY(21);
Text := ExpandConstant('{sysuserinfoname}');
end;

OrganizationEdit := TNewEdit.Create(WizardForm);
with OrganizationEdit do
begin
Parent := UserPage.Surface;
Left := ScaleX(16);
Top := ScaleY(112);
Width := ScaleX(385);
Height := ScaleY(21);
Text := ExpandConstant('{sysuserinfoorg}');
end;
end;

function SetUser(Param: String): String;
begin
Result := Format('%s', [UsernameEdit.Text]);
end;

function SetOrg(Param: String): String;
begin
Result := Format('%s', [OrganizationEdit.Text]);
end;

ispolin
15-09-2014, 18:50
saurn, отлично, мы это сделали!

ispolin
15-09-2014, 19:38
ой осталась самая малость
что и где прописать, чтобы при деинсталяции удалялись добавленные ключи из реестра?

Dodakaedr
15-09-2014, 19:40
ой осталась самая малость
что и где прописать, чтобы при деинсталяции удалялись добавленные ключи из реестра? »
Добавить Flags
[Registry]
Root: HKLM; SubKey: SOFTWARE\1C; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegOrg; ValueData:{code:GetRegData|RegOrg}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegUser; ValueData: {code:GetRegData|RegUser}; Flags: uninsdeletevalue uninsdeletekeyifempty




© OSzone.net 2001-2012