PDA

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


Страниц : 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 127 128 129 130 [131] 132 133

Serega
02-11-2010, 10:28
Здрасти приехали, я ему про Фому а он мне про Ерёму, не работает у меня твой код »
Ну во первых, мы с Вами вместе водку не пили и не являемся близкими знакомыми или тем более друзьями... тон смените и не надо тыкать.
в справке там рядом не стоял мой вопрос. »
В Справке и не будет прямых ответов, а лишь описание функционала, просто всегда нужно немного подумать...
1) Мне простая распаковка не впилась! »
Ну я же не знаю, что конкретно там у Вас впилось...
2) Нужна распаковка только zip а не 7zip или тем более rar. »
Ну так вы немного хоть подумайте, какие архивы умеет распаковывать утилита 7z
3) Распаковка должна происходить только тогда когда этот компонент выбран. »
Так и привижите Вашу распаковку к выбору определённого компонента, прочитайте в Справке про BeforeInstall и AfterInstall, так же почитайте про IsComponentSelected
4) Распаковка только в графическом виде. »
Здесь у Вас несколько путей решения, изменить Ваш архив на самораспаковывающийся, либо использовать сторонние dll'ки для распаковки архивов с отображением в прогрессбаре, но насколько помню ни у одной нет поддержки обычных .zip архивов, хотя могу и заблуждаться, посмотрите ISDone.dll

somename
02-11-2010, 18:19
Да ладно, к другому инсталлеру, напишите сюда нормальный путь к папке на диске ЦЭ, и в скрипте Сереги я бы подставил UpperCase()
(Pos(UpperCase(LogonUser), UpperCase(Result))
чтобы все буквы при сравнении были большими. »
Сделал! Не работает на седьмой винде

R.i.m.s.k.y.
03-11-2010, 09:08
Сделал! Не работает на седьмой винде »
Какую ошибку пишет?
Есть еще функция AnsiUppercase, она даже предпочтительнее, тк использует текущую кодировку системы.

А перебирать системные папки через MSGbox пробовали? нету нужной папки?

by_pbh
03-11-2010, 14:54
I need a code for extracting files from dvd: bin\gamedata.arc in {app}
sorry for my bad english

R.i.m.s.k.y.
03-11-2010, 15:22
sorry for my bad english »
your russian is more terrible?

STRAYKER
03-11-2010, 18:13
У каво есть Stem.cjstyles ?
Если не жалко дайте скачать !?

Serega
03-11-2010, 20:02
Не работает на седьмой винде »
Вот код... проверил на W7, Vista под рукой нет, поэтому добавил условие проверки, что не Vista:


[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Code]
function GetLogonUserProfile: string;
{ функция вернёт полный путь до папки пользователя, вошедшего в систему тестировалась на XP и W7 }
var
Version: TWindowsVersion;
RootKey: Integer;
SubKeyName: string;
ValueName: string;
LogonUser: string;
ActiveUser: string;
begin
try
Result := '';
GetWindowsVersionEx(Version);
if Version.NTPlatform then
begin
case Version.Major of
5: begin // XP
case IsWin64 of
True : RootKey := HKEY_CURRENT_USER_64;
False: RootKey := HKEY_CURRENT_USER;
end;
RootKey := HKEY_CURRENT_USER;
SubKeyName := 'Software\Microsoft\Windows\CurrentVersion\Explorer';
ValueName := 'Logon User Name';
end;
6: // W7 и Vista
if Version.Minor = 1 then // здесь проверяем, что не Vista, т.к. на Vista я не тестировал и не знаю результата...
begin
case IsWin64 of
True : RootKey := HKEY_LOCAL_MACHINE_64;
False: RootKey := HKEY_LOCAL_MACHINE;
end;
SubKeyName := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI';
ValueName := 'LastLoggedOnUser';
end;
end;
if RegQueryStringValue(RootKey, SubKeyName, ValueName, LogonUser) then
begin
while (LogonUser <> '') and ((LogonUser[1] = '.') or (LogonUser[1] = '\')) do
Delete(LogonUser, 1, 1);
ActiveUser := ExpandConstant('{%USERNAME}');
Result := ExpandConstant('{%USERPROFILE}');
if (Result <> '') and (Pos(Lowercase(LogonUser), Lowercase(Result)) = 0) then
StringChange(Result, ActiveUser, LogonUser);
end;
end;
finally
SetLength(SubKeyName, 0);
SetLength(ValueName, 0);
SetLength(LogonUser, 0);
SetLength(ActiveUser, 0);
end;
end;

function InitializeSetup(): Boolean;
begin
MsgBox(GetLogonUserProfile, mbInformation, MB_OK);
end;

Serega
03-11-2010, 20:21
I need a code for extracting files from dvd: bin\gamedata.arc in {app} »
Look on this site (http://freearc.org/InnoSetup.aspx), as there there are usage examples.

serg aka lain
03-11-2010, 21:05
P.S Кстати это не та прога которая в 7зипе лежит, а эта вообще какая то замороченая, но зато распаковка в графическом режиме!»
Смотрел, действительно, софтинка может извлекать и .zip и .7z,
но ещё к ней нужна 7-zip32.dll, без нее не хочет.

serg aka lain
03-11-2010, 22:50
Вот код... проверил на W7 »
Ради интереса проверил у себя (Win7 64), показывает пустое окно.
имхо, нужно доработать этот кусок кода

if Version.Minor = 1 then // здесь проверяем, что не Vista, т.к. на Vista я не тестировал и не знаю результата...
begin
if IsWin64 then
RootKey := HKEY_LOCAL_MACHINE_64
else
RootKey := HKEY_LOCAL_MACHINE;

somename
03-11-2010, 23:23
Вот код... проверил на W7, Vista под рукой нет, поэтому добавил условие проверки, что не Vista: »
эх.. Может у тебя пароль админа не спрашивается когда под юзером сидишь? У меня - опять путь к папке админа, хотя я под юзером сижу..

Serega
04-11-2010, 00:28
проверил у себя (Win7 64) »
да... про 64 битные, я и забыл, сейчас исправлю... а после такого изменения, показывает нормально?

Может у тебя пароль админа не спрашивается когда под юзером сидишь? »
всё спрашивает, как положено и пароль ввожу...
Прочитайте у себя в реестре раздел - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI, какое значение LastLoggedOnUser ?

serg aka lain
04-11-2010, 00:44
а после такого изменения, показывает нормально? »
:yes:

serg aka lain
04-11-2010, 02:28
какие ключи вставлять в инно?! »
Там вроде всё просто, вот пример без привязки к дополнительным задачам.
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program

[Files]
Source: un7zip.exe; DestDir: {tmp}; Flags: ignoreversion;
Source: 7-zip32.dll; DestDir: {tmp}; Flags: ignoreversion;
Source: un7zip.ini; DestDir: {tmp}; Flags: ignoreversion;
Source: Data.zip; DestDir: {app}; Flags: ignoreversion nocompression deleteafterinstall;

[Run]
Filename: {tmp}\un7zip.exe; Parameters: """{app}\*.zip"" ""{app}"" ""{app}\extract.log"""; Flags: waituntilterminated;

[UninstallDelete]
Type: filesandordirs; Name: {app}\Data;
Type: files; Name: {app}\extract.log;

somename
04-11-2010, 10:48
Прочитайте у себя в реестре раздел - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI, какое значение LastLoggedOnUser ? »
значение соападает с именем пользователя
т.е. то что надо.
но скрипт выводи расположение папки админа

necromanster
04-11-2010, 23:45
Господа. Прошу помощи. Всю голову себе сломал, но ни чего не получается. Одна надежда на профи, то есть на вас.

Пытался сделать репак на Fallout New Vegas, со всеми дополнениями, русиком, и кряком.

Но при запуске игры, она пишет, что не видит INI файлы. То есть лаучер не работает, В игре начинаются баги, такие как крутящиеся головы, народ не ходит, а просто ездит. Но при замене файлов реэстра на оригинальные, все встает на место. Прошу подсказать, что сделал не так. Скрипт прилагаю. Заранее благодарен.


; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName=Fallout New Vegas
AppVerName=Fallout New Vegas 1.2
AppPublisher=Bethesda Softworks
AppPublisherURL=Necromant Soft
AppSupportURL=Necromant Soft
AppUpdatesURL=Necromant Soft
DefaultDirName={pf}\Bethesda Softworks\Fallout New Vegas
DefaultGroupName=Fallout New Vegas
AllowNoIcons=yes
OutputDir=G:\инсталятор\1
OutputBaseFilename=setup
WizardImageFile=C:\Program Files (x86)\Smart Install Maker\Bitmaps\Import\Bmp008.bmp
WizardSmallImageFile=C:\Program Files (x86)\Smart Install Maker\Bitmaps\Import\Bmp004.bmp
Compression=none
SolidCompression=true
InternalCompressLevel=none
WindowVisible=true
BackColor=clMaroon

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: G:\инсталятор\Fallout New Vegas\FalloutNV.exe; DestDir: {app}; Flags: ignoreversion
Source: G:\инсталятор\Fallout New Vegas\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\Fallout New Vegas; Filename: {app}\FalloutNV.exe
Name: {group}\{cm:ProgramOnTheWeb,Fallout New Vegas}; Filename: Necromant Soft
Name: {group}\{cm:UninstallProgram,Fallout New Vegas}; Filename: {uninstallexe}
Name: {commondesktop}\Fallout New Vegas; Filename: {app}\FalloutNV.exe; Tasks: desktopicon; Flags: createonlyiffileexists; WorkingDir: {app}
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Fallout- New Vegas; Filename: {app}\FalloutNV.exe; Tasks: quicklaunchicon

[Run]
Filename: {app}\FalloutNV.exe; Description: {cm:LaunchProgram,Fallout- New Vegas}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}

serg aka lain
05-11-2010, 01:22
при замене файлов реэстра на оригинальные, все встает на место. »
Ну и допишите эти ключи реестра в свой скрипт.

necromanster
05-11-2010, 01:39
Ну и допишите эти ключи реестра в свой скрипт. »

Так я и вписал их:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}

Я взял файлы реэстра. которые были туда вложены при распаковке оригинального образа (фениксом)

Но что то не стыкуется. Игра их не видит. И по этому все на перекосяк. У меня просто сохранены оригинальные файлы, и после того как я удаляю те которые были вложены в реэстр уже репаком, и заменяю оригинальными, то все работает. Странно. Ведь одно и тоже.

serg aka lain
05-11-2010, 02:57
Странно. Ведь одно и тоже. »
Пробуйте так:

[Registry]
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks; Flags: uninsdeletekeyifempty;
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\FalloutNV; Flags: uninsdeletekey;
Root: HKLM; Subkey: SOFTWARE\Bethesda Softworks\FalloutNV; ValueType: string; ValueName: Installed Path; ValueData: {app}\;

Henry_Townsend
05-11-2010, 17:24
Вобщем, есть такой скрипт для текстурирования кнопки "Отмена", вынесеную на передний план. Всё хорошо, вот только текстура отображается и на странице завершения установки где самой кнопки нет и быть не должно . Можно ли как-то отключить LoadButtonImage(WizardForm.CancelButton,bidCancel) ?
http://ib1.keep4u.ru/s/2010/11/05/1c/1ca3fe9bf9ad6184cd1444a077c139b1.jpg (http://keep4u.ru/full/1ca3fe9bf9ad6184cd1444a077c139b1.html)

П.С.Задаю вопрос второй раз и буду благодарен за любую помощь, даже за сообщения, что это в Inno Setup невыполнимо.



[Setup]
AppName=Test Setup
AppVerName=1.0
DefaultDirName={pf}\Temp
OutputDir=.
AppCopyright=© forum.oszone.net

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy;
Source: compiler:Examples\*; DestDir: {app}; Flags: IgnoreVersion recursesubdirs createallsubdirs;

[_code_]
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;

var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton;
bidNext: Button:=WizardForm.NextButton;
bidCancel: Button:=WizardForm.CancelButton;
bidDirBrowse: Button:=WizardForm.DirBrowseButton;
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton;
else
Exit
end
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;

begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel

Image:=TBitmapImage.Create(WizardForm) //Рисунок который ложится на кнопку
Image.Width:=160 //Обязательно прописать оригинальный размер рисунка
Image.Height:=23
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image

with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end;

Labl:=TLabel.Create(WizardForm) //Текст кнопок
Labl.Left:=23 //Указываем положение текста
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite //Цвет текста
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;

procedure InitializeWizard();
begin
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.BringToFront;
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Left:=337
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
if CurPageID=wpInstalling then
begin
WizardForm.BorderStyle:=bsDialog;
WizardForm.MainPanel.Visible:=False;
WizardForm.Width:=ScaleX(320);
WizardForm.Height:=ScaleY(127);
WizardForm.InnerNotebook.Left:=ScaleX(7);
WizardForm.InnerNotebook.Top:=ScaleY(7);
WizardForm.InnerNotebook.Width:=ScaleX(300);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(17);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(37);
WizardForm.ProgressGauge.Left:=ScaleX(0);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(122);
WizardForm.CancelButton.Top:=ScaleY(70);
LoadButtonImage(WizardForm.CancelButton,bidCancel) // вот тут и есть корень зла
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(330);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(110);
end;
if CurPageID=wpFinished then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end;
end;

[Languages]
Name: ru; MessagesFile: compiler:\Languages\Russian.isl;




© OSzone.net 2001-2012