Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
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;
Откуда вы знаете какие переменные инно за что отвечают? »
Это кому вопрос адресован?
От себя могу добавить, используйте версию от Restools, у них в редакторе есть много интересных фич.
Допустим набираем в процедуре WizardForm и ставим точку, дальше немного подождём и через секунду появиться список с возможными компонентами.
Принудительный вызов, после набора нескольких букв, списка с подсказками Ctrl+J.
Так же удобно смотреть описание разных функций, набираем название стандартной функции, наводим на нёё мышкой и нажимаем Ctrl+ЛКМ.
К примеру что WizardForm.DirEdit.Text - путь? »
Это также можно узнать в редакторе Restools, во вкладке WizardForm Designer открываем страницу SelectDirPage и выделяем искомый Edit, справа увидим, что он называется DirEdit.
Это защита от "упёртого" юзера, который любой ценой будет пытаться установить в эту папку? »а они такие, что захотят сделать - то доведут до конца))
вот теперь замечательно работает. спасибо
R.i.m.s.k.y.
23-12-2010, 22:27
ksunechkin,
Для проги Налогоплательщик дистр пишешь ;)
Serega,
А можно попросить забацать на инно дистр самого инно со всеми фишками? чтобы не собирать их по всем ссылкам (да и неработает у меня часть, мой инно здесь добрый человек подарил)
дистр самого инно со всеми фишками? »
что конкретно вы имеете ввиду под словом фишки?
да и неработает у меня часть »
обновите до последней версии.
Люди, будьте человеками помогите пожалуйста :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
что конкретно вы имеете ввиду под словом фишки »
А все что в шапке
Habetdin
Спасибо огромное!!! Все получилось!!!
Gnom_aka_Lexander
24-12-2010, 10:37
R.i.m.s.k.y., Здесь (http://ifolder.ru/20993083) со всеми фишками, тока скрипт жойнер не стал добавлять, он все равно криво работает. Если гдето чегото неправильно - говорить, не молчать, буду учитывать при обновлениях.
Habetdin
Еще одна проблема при удалении программы выскакивают ошибки:
http://s40.radikal.ru/i089/1012/17/338546e2a323.png
http://i082.radikal.ru/1012/0b/b4f5c0800ab8.png
и есть ли возможность установить свою иконку на unins000.exe
что бы отображалась в Установка и удаление программ. :help: пожалуйста!!!
установить свою иконку на unins000.exe
что бы отображалась в Установка и удаление программ »
[Setup]
UninstallDisplayIcon={app}\MyProg.exe,1
Так она будет отображаться с установленного MyProg.exe, а мне нужно что бы она была другой»
Пример:
иконка программы:
http://s15.radikal.ru/i189/1012/63/ed95eedab50d.png
иконка удаления:
http://s016.radikal.ru/i334/1012/1d/7ac0a2123fc4.png
как сделать такую доп.старницу с двумя чекбоксами? не нашел как сделать
http://s015.radikal.ru/i332/1012/3b/b144d948e248.png
Так она будет отображаться с установленного MyProg.exe, а мне нужно что бы она была другой » ну дак а если путь к другой иконке то прописать? ... не?
как сделать такую доп.старницу с двумя чекбоксами? не нашел как сделать.»
Попробуй с помощью 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.