Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Здрасти приехали, я ему про Фому а он мне про Ерёму, не работает у меня твой код »
Ну во первых, мы с Вами вместе водку не пили и не являемся близкими знакомыми или тем более друзьями... тон смените и не надо тыкать.
в справке там рядом не стоял мой вопрос. »
В Справке и не будет прямых ответов, а лишь описание функционала, просто всегда нужно немного подумать...
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 пробовали? нету нужной папки?
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 ?
Если не жалко дайте скачать !?
Не работает на седьмой винде »
Вот код... проверил на 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;
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: »
эх.. Может у тебя пароль админа не спрашивается когда под юзером сидишь? У меня - опять путь к папке админа, хотя я под юзером сижу..
проверил у себя (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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.