Войти

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


Страниц : 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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

R.i.m.s.k.y.
23-12-2010, 21:11
Откуда вы знаете какие переменные инно за что отвечают? К примеру что WizardForm.DirEdit.Text - путь?

serg aka lain
23-12-2010, 21:11
И может проще сделать так »
Соглашусь, проще.

serg aka lain
23-12-2010, 21:27
все хорошо, но вот если у disk:\program files\ убрать последний слэш, т.е. disk:\program files - все равно дает установить( »
Это защита от "упёртого" юзера, который любой ценой будет пытаться установить в эту папку?
Ну раз надо, то ещё раз пофиксим


[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={sd}\My Program
OutputDir=.
OutputBaseFilename=test

[Code]
procedure MyFunction(Sender: TObject);
var
S: String;
begin
S := ExtractFilePath(WizardForm.DirEdit.Text);
SetLength(S, Length(S)-1);

if IsWin64 then
begin
if (Pos(ExpandConstant('{pf32}'), S) > 0) or (Pos(ExpandConstant('{pf64}'), S) > 0) then
begin
MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK);
WizardForm.DirEdit.Text := ExpandConstant('{sd}\My Program');
end;
end else
if Pos(ExpandConstant('{pf}'), S) > 0 then
begin
MsgBox('Программу нельзя устанавливать в' + #13#10 + S, mbInformation, MB_OK);
WizardForm.DirEdit.Text := ExpandConstant('{sd}\My Program');
end;
WizardForm.DirEdit.Text := AddBackSlash(WizardForm.DirEdit.Text);
end;

procedure InitializeWizard();
begin
WizardForm.DirEdit.OnChange := @MyFunction;
end;

Serega
23-12-2010, 21:33
Откуда вы знаете какие переменные инно за что отвечают? »
Это кому вопрос адресован?
От себя могу добавить, используйте версию от Restools, у них в редакторе есть много интересных фич.
Допустим набираем в процедуре WizardForm и ставим точку, дальше немного подождём и через секунду появиться список с возможными компонентами.
Принудительный вызов, после набора нескольких букв, списка с подсказками Ctrl+J.
Так же удобно смотреть описание разных функций, набираем название стандартной функции, наводим на нёё мышкой и нажимаем Ctrl+ЛКМ.
К примеру что WizardForm.DirEdit.Text - путь? »
Это также можно узнать в редакторе Restools, во вкладке WizardForm Designer открываем страницу SelectDirPage и выделяем искомый Edit, справа увидим, что он называется DirEdit.

Duality
23-12-2010, 21:38
Это защита от "упёртого" юзера, который любой ценой будет пытаться установить в эту папку? »а они такие, что захотят сделать - то доведут до конца))
вот теперь замечательно работает. спасибо

R.i.m.s.k.y.
23-12-2010, 22:27
ksunechkin,
Для проги Налогоплательщик дистр пишешь ;)
Serega,
А можно попросить забацать на инно дистр самого инно со всеми фишками? чтобы не собирать их по всем ссылкам (да и неработает у меня часть, мой инно здесь добрый человек подарил)

Serega
23-12-2010, 23:17
дистр самого инно со всеми фишками? »
что конкретно вы имеете ввиду под словом фишки?
да и неработает у меня часть »
обновите до последней версии.

gur74
24-12-2010, 03:11
Люди, будьте человеками помогите пожалуйста :help: поправить код, не воспроизводится музыка.
Вот скрипт:;InnoSetupVersion=5.3.10

[Setup]
AppName=LikeRusXP Localization
AppVerName={cm:NameAndVersion,LikeRusXP Localization,6.01.12}
AppVersion=6.01.12
DefaultDirName={pf}\LikeRusXP Localization
DefaultGroupName=LikeRusXP Localization
OutputBaseFilename=likerusxp 6.01.12
Compression=lzma
LicenseFile=embedded\License.txt
InfoBeforeFile=embedded\InfoBefore.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
SetupIconFile={tmp}\MAINICON.ico

[Files]
Source: "{tmp}\bass.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{tmp}\sound.mp3"; DestDir: "{tmp}"; Flags: deleteafterinstall dontcopy
Source: "{tmp}\ISSkin.dll"; DestDir: "{app}"; Flags: dontcopy
Source: "{tmp}\Codejock.cjstyles"; DestDir: "{app}"; Flags: dontcopy
Source: "{tmp}\Splash.png"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "{tmp}\isgsg.dll"; DestDir: "{tmp}"; Flags: deleteafterinstall ignoreversion dontcopy
Source: "{app}\LikeRusXP.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\limage.exe"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\LikeRusXP.chm"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\License.txt"; DestDir: "{app}"; MinVersion: 4.1.2222,5.0;
Source: "{app}\Glossary\russian.lg3"; DestDir: "{app}\Glossary"; MinVersion: 4.1.2222,5.0;
Source: "{app}\Store\elibrary.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lresdumper.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\sl3core.dll"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\lires.exe"; DestDir: "{app}\Store"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\lresdumper.dll"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\ResBinder.exe"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\readme.txt"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\english.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion
Source: "{app}\Store\rb\russian.uil"; DestDir: "{app}\Store\rb"; MinVersion: 4.1.2222,5.0; Flags: ignoreversion

[Messages]
BeveledLabel=RePack by Gu® 2010

////////////////////// Skin //////////////////////

[Code]
#ifdef UNICODE
#define PStr "AnsiString"
#else
#define PStr "String"
#endif

procedure LoadSkin(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst();
external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Codejock.cjstyles');
CreateDir(ExpandConstant('{sd}\ISSkin'));
FileCopy(ExpandConstant('{tmp}\Codejock.cjstyles'), ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), True);
LoadSkin(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), 'NormalBlack.ini');

Result := True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
DeleteFile(ExpandConstant('{sd}\ISSkin\isskin.dll'));
DeleteFile(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'));
RemoveDir(ExpandConstant('{sd}\ISSkin'));
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'),
ExpandConstant('{tmp}\isskin.dll'), True);
FileCopy(ExpandConstant('{app}\Codejock.cjstyles'),
ExpandConstant('{tmp}\Codejock.cjstyles'), True);

LoadSkinUninst(ExpandConstant('{tmp}\Codejock.cjstyles'), 'NormalBlack.ini');
Result := True;
end;

procedure DeinitializeUninstall();
begin
UnloadSkinUninst();
end;

////////////////////// Splash ////////////////////////////

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard();
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;

////////////////////// Sound ///////////////////////////

const
BASS_SAMPLE_LOOP = 4; //повторение

type
HSTREAM = DWORD; //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure InitializeWizard2();
var
Name1: string;
i: Integer;
begin
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('sound.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\sound.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup2();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;

////////////////////// Setup end //////////////////////

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;

[Run]
Filename: "{app}\LikeRusXP.exe"; Description: "{cm:LaunchProgram,LikeRusXP}"; MinVersion: 4.1.2222,5.0;

[Icons]
Name: "{group}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:ProgramOnTheWeb,LikeRusXP 6.01.12}"; Filename: "http://likerusxp.ru/"; MinVersion: 4.1.2222,5.0;
Name: "{group}\{cm:UninstallProgram,LikeRusXP 6.01.12}"; Filename: "{uninstallexe}"; MinVersion: 4.1.2222,5.0;
Name: "{commondesktop}\LikeRusXP 6.01.12"; Filename: "{app}\LikeRusXP.exe"; Tasks: "desktopicon"; MinVersion: 4.1.2222,5.0;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\LikeRusXP"; Filename: "{app}\LikeRusXP.exe"; Tasks: "quicklaunchicon"; MinVersion: 4.1.2222,5.0;

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; MinVersion: 4.1.2222,5.0;

[CustomMessages]
russian.NameAndVersion=%1, версия %2
russian.AdditionalIcons=Дополнительные значки:
russian.CreateDesktopIcon=Создать значок на &Рабочем столе
russian.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
russian.ProgramOnTheWeb=Сайт %1 в Интернете
russian.UninstallProgram=Деинсталлировать %1
russian.LaunchProgram=Запустить %1
russian.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
russian.AssocingFileExtension=Связывание %1 с файлами %2...

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

Habetdin
24-12-2010, 07:11
gur74, попробуйте так:
Только секция code:
[code]
#ifdef UNICODE
#define PStr "AnsiString"
#else
#define PStr "String"
#endif
////////////////////// Sound and Skin ///////////////////////////

const
BASS_SAMPLE_LOOP = 4; //повторение

type
HSTREAM = DWORD; //тип звукового потока

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure LoadSkin(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: {#PStr}; lpszIniFileName: {#PStr});
external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst();
external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function InitializeSetup(): Boolean;
var Name1: string;
i: Integer;
begin
ExtractTemporaryFile('Codejock.cjstyles');
CreateDir(ExpandConstant('{sd}\ISSkin'));
FileCopy(ExpandConstant('{tmp}\Codejock.cjstyles'), ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), True);
LoadSkin(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'), 'NormalBlack.ini');
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('sound.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\sound.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
BASS_ChannelPlay(i, True);
end;
Result := True;
end;

procedure DeinitializeSetup();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
DeleteFile(ExpandConstant('{sd}\ISSkin\isskin.dll'));
DeleteFile(ExpandConstant('{sd}\ISSkin\Codejock.cjstyles'));
RemoveDir(ExpandConstant('{sd}\ISSkin'));
end;

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'),
ExpandConstant('{tmp}\isskin.dll'), True);
FileCopy(ExpandConstant('{app}\Codejock.cjstyles'),
ExpandConstant('{tmp}\Codejock.cjstyles'), True);

LoadSkinUninst(ExpandConstant('{tmp}\Codejock.cjstyles'), 'NormalBlack.ini');
Result := True;
end;

procedure DeinitializeUninstall();
begin
UnloadSkinUninst();
end;

////////////////////// Splash ////////////////////////////

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard();
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;

////////////////////// Setup end //////////////////////

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;

R.i.m.s.k.y.
24-12-2010, 07:18
что конкретно вы имеете ввиду под словом фишки »
А все что в шапке

gur74
24-12-2010, 08:26
Habetdin

Спасибо огромное!!! Все получилось!!!

Gnom_aka_Lexander
24-12-2010, 10:37
R.i.m.s.k.y., Здесь (http://ifolder.ru/20993083) со всеми фишками, тока скрипт жойнер не стал добавлять, он все равно криво работает. Если гдето чегото неправильно - говорить, не молчать, буду учитывать при обновлениях.

gur74
24-12-2010, 10:57
Habetdin

Еще одна проблема при удалении программы выскакивают ошибки:

http://s40.radikal.ru/i089/1012/17/338546e2a323.png

http://i082.radikal.ru/1012/0b/b4f5c0800ab8.png

и есть ли возможность установить свою иконку на unins000.exe

что бы отображалась в Установка и удаление программ. :help: пожалуйста!!!

gvshil
24-12-2010, 11:15
установить свою иконку на unins000.exe
что бы отображалась в Установка и удаление программ »

[Setup]
UninstallDisplayIcon={app}\MyProg.exe,1

gur74
24-12-2010, 11:53
Так она будет отображаться с установленного MyProg.exe, а мне нужно что бы она была другой»

Пример:

иконка программы:

http://s15.radikal.ru/i189/1012/63/ed95eedab50d.png

иконка удаления:

http://s016.radikal.ru/i334/1012/1d/7ac0a2123fc4.png

Duality
24-12-2010, 11:57
как сделать такую доп.старницу с двумя чекбоксами? не нашел как сделать
http://s015.radikal.ru/i332/1012/3b/b144d948e248.png

Так она будет отображаться с установленного MyProg.exe, а мне нужно что бы она была другой » ну дак а если путь к другой иконке то прописать? ... не?

gur74
24-12-2010, 12:11
как сделать такую доп.старницу с двумя чекбоксами? не нашел как сделать.»

Попробуй с помощью IS Form Designer.

ну дак а если путь к другой иконке то прописать? ... не? »

А можно образец скрипта.Я чего то туплю.

R.i.m.s.k.y.
24-12-2010, 14:50
Лександер,
чем обусловлено Compil32.exe и Compil321.exe?
Может спросить - какой оставить при установке?
не хватает еще двух архивных веток этого форума
И ссылки-иноки в меню пуск...
и мне оформление не очень :dont-know
Но все равно СПАСИБО!

авиранашла внутри два MALWARE: IsProgressBar.dll и iss.exe

Gnom_aka_Lexander
24-12-2010, 15:00
R.i.m.s.k.y.,
Реакция антивируса - это нормально, сам этот вопрос задавал.
Над оформлением еще работаю :)
Compil32.exe - стандартная версия.
Compil321.exe- расширенный редактор от Рестулс (ярлык забыл на него отдельный сделать) :)
А в меню пуска открой папку Inno Setup - все там.

R.i.m.s.k.y.
24-12-2010, 15:12
Лександер, при установке думаю нужно спросить - на какой экзешник регить файлы - расширенный или обычный
и положить внутрь скриптик этого дистра




© OSzone.net 2001-2012