Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
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] и т.д. С нетерпением жду ответа, Спасибо...
А можно перенести всю информацию из 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;
Если есть готовый код , дайте пожалуйста , а то уже листать устал 3 часа глаза как у рака. »#1905 (http://forum.oszone.net/post-2292520-1905.html)
Добрый день :) Подскажите пожалуйста, есть ли такой код, который бы запрещал изменять путь установки программы? Мне нужно создать установщик, который бы установил программу именно туда, куда я укажу, а конкретнее в C:\ProgramData. Можно ли это как то осуществить? Спасибо.
Irenis, если вообще не выводить страницу выбора пути установки
[Setup]
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=yes
Ну а если выводить, то
[Setup]
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=no
[Сode]
procedure InitializeWizard;
begin
WizardForm.DirEdit.enabled:=false;
end;
Подскажите как реализовать в Inno
нужно, чтобы после окна выбора компонентов появлялось окно для записи пользовательских данных в определённую ветку реестра
на подобии
http://i64.fastpic.ru/big/2014/0915/4b/eaa87b6c8ffacc223c563069ff38b34b.jpg
Shkutu, спасибо :) А какой код прописать, чтобы программа автоматически установилась по пути C:\ProgramData?
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
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
однако хочется предоставить конечному пользователю самому решать, что туда занести т.е нужно окно для ввода данных
автоматически установилась по пути 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;
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;
Shkutu,
http://i63.fastpic.ru/big/2014/0915/35/07a038849cfe8d973e1cb4ea46d80435.jpg
saurn, окошко вообще не появилось для ввода данных
ispolin, переменная UserDataPage не определена. Добавьте в начало секции Code
var
UserDataPage: TInputQueryWizardPage;
saurn, дальше..
http://i67.fastpic.ru/big/2014/0915/7a/0b87ec7bac0c76c04bfa10f64fbe207a.jpg
ispolin, вместо ReportServerDataPage укажите ID страницы, после которой необходимо отобразить вашу кастомную страницу:
UserDataPage:=CreateInputQueryPage(wpSelectComponents,
'Данные организации', 'Введите данные организации',
'Введите данные организации');
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;
saurn, отлично, мы это сделали!
ой осталась самая малость
что и где прописать, чтобы при деинсталяции удалялись добавленные ключи из реестра?
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC