PDA

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


Страниц : 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

habib2302
03-07-2013, 16:24
подскажите мне как сделать чтобы инсталлятор создавал ветку реестра с ковычками.т.е
было так C:\Program Files (x86)\Universal Share Downloader\USDownloader.exe
а стало так "C:\Program Files (x86)\Universal Share Downloader\USDownloader.exe"

saurn
03-07-2013, 17:10
подскажите мне как сделать чтобы инсталлятор создавал ветку реестра с ковычками »
Root: HKLM; Subkey: SOFTWARE\My Program; ValueName: Path; ValueType: String; ValueData: """{app}"""; Flags: uninsdeletekey;

Crazy Noise
04-07-2013, 10:48
2.
читать дальше » »
Я имел ввиду [Run] привязать к
begin
NewButton1 := TNewButton.Create(WizardForm);
with NewButton1 do
begin
Parent := WizardForm;
Left := ScaleX(16);
Top := ScaleY(327);
Width := ScaleX(75);
Height := ScaleY(25);
Caption := 'NewButton1';
OnClick := @NewButton1Click;
end;
возможно ли?

Dinvin4ester
05-07-2013, 18:03
А мне не поможете ?

habib2302
05-07-2013, 19:11
помогите решить одну проблему.короче. есть прога Universal Share Downloader 1.3.5.9 и как сделать чтобы программа запускалась вместе с windows свернуто

saurn
05-07-2013, 23:30
habib2302,
Внимание! Данная тема предназначена только для обсуждения написания скриптов ! »
-----------------------------------------------------
Эффект "растворения" в слайдшоу еще можно как-то прописать ? »
Эффекты настраиваются в процедуре ShowImage
ShowImage(piclist.strings[CurrentPicture - 1], 1);
Последняя циферка, выделенная жирным, в строке номер эффекта перехода.

Список возможных значений:

1 - Случайный эффект.
2 - Alpha Blend.
3 - Blocks.
4 - Circle.
5 - Diagonal.
6 - Fuse.
7 - InterLaced.
8 - Page.
9 - Radial.
10 - Roll.
11 - Waterfall.
12 - Wipe.

Меняйте номера эффектов в процедуре и выбирайте, какой вам понравится.


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

Johny777
06-07-2013, 16:09
Crazy Noise, saurn,
Меняйте номера эффектов в процедуре и выбирайте, какой вам понравится. »
можно ещё и рандомом ShowImage(piclist.strings[CurrentPicture - 1], Random(12)+1);


Кстати вот имплементация из делфи функции RandG() на основе нормального распределения по Гауссу
http://img266.imageshack.us/img266/2954/m3ln.jpg (http://imageshack.us/photo/my-images/266/m3ln.jpg/)
Работает она медленнее (особенно в инно), но разброс в диапазоне намного "случайнее". Кому надо забирайте! :)
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
InfoBeforeFile=compiler:license.txt
DisableWelcomePage=yes



[Code ]
function Rand(): Extended;
begin
Result := Random(MAXINT)/MAXINT;
end;

function Sqr(const E: Extended): Extended;
begin
Result := E*E;
end;

procedure Inc(var Int: Integer);
begin
Int := Int+1;
end;

function Ln(const X: Extended): Extended;
var
tek, rez, b: Extended;
i : Longint;
begin
rez := 0;
b := X-1;
i := 1;
tek := b;
while ABS(tek) >= 0.00000001 do
begin
rez := rez + tek;
Inc(i);
b := -b*(x-1);
tek := b/i;
end;
Result := rez;
end;

//Функция генерирует случайное число с отклонением по Гауссу от среднего значения Mean. Наибольшая часть возвращаемых значений будет лежать в диапазоне Mean-StdDev ... Mean+StdDev.
function RandG(const Mean, StdDev: Extended): Extended;
{ Marsaglia-Bray algorithm }
var
U1, S2: Extended;
begin
repeat
U1 := 2*Rand() - 1;
S2 := Sqr(U1) + Sqr(2*Rand()-1);
until S2 < 1;
Result := Sqrt(-2*Ln(S2)/S2) * U1 * StdDev + Mean;
end;


function RandEx(const Range: Extended): Extended; //X := RandG(100,10); { 90<=X<=110 }
begin

Result := Abs(RandG(Range/2, Range/2));
if Result > Range then
repeat
Result := Result-1;
until Result <= Range;
end;



procedure InitializeWizard();
var
i: Integer;
begin
WizardForm.InfoBeforeMemo.Clear;
WizardForm.InfoBeforeMemo.Text := 'RandEx' + #9#9#9 + 'Random';
Randomize();
for i := 0 to 20 do WizardForm.InfoBeforeMemo.Text := WizardForm.InfoBeforeMemo.Text + #13#10 + IntToStr(Round(RandEx(12))) + #9#9#9 + IntToStr(Random(12)+1);
end;

habib2302
06-07-2013, 19:38
как сделать фон BeveledLabel прозрачным
http://img35.imageshack.us/img35/1507/r3bd.png (http://img713.imageshack.us/img713/7381/gi0l.png)

saurn
06-07-2013, 19:52
как сделать фон BeveledLabel »
Это TNewStaticText у этих контролов есть свойство прозрачности в юникодовой версии Inno, в Ansi версии нет.

insombia
07-07-2013, 17:25
http://rghost.ru/47250682 при наведении на таксбар видно черную полосу,как её убрать?
http://i48.fastpic.ru/big/2013/0706/72/21398ff8d53834517cb277a6c6d72872.jpg

habib2302
07-07-2013, 19:09
insombia, это типичная проблема.для примера возьми установи тему на инсталлятор и там будет другия кривизна

alert30
07-07-2013, 19:46
insombia, это у самого Windows 7 не так.

saurn
07-07-2013, 22:26
Я имел ввиду [Run] привязать к »
Секция [Run] выполняется только после завершения установки. Чем Exec не устраивает?

habib2302
07-07-2013, 22:39
Windows 7 не так. »в каком смысле не так?у меня просто тоже самое,но винда недавно установленнаяя!!

доброе время суток.Я решил вернутся к моему сообщению по поводу appid с фигурными скобками {}

RegQueryStringValue(HKLM, Format('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%s_is1', [AppIds[i]]), 'UninstallString', Buff);
Buff := RemoveQuotes(Buff);
появились еще проблемы.
после удаления моего репака выдает ошибку
http://img203.imageshack.us/img203/1652/thumbmhv.png (http://img221.imageshack.us/img221/4152/snagit00021306201312071.png)
»сейчас делаю репак image comparer.оригинальный экзешник был создан через инно.т.е нету гемороя с _is1 на конце appid.но я хочу решить эту проблему
http://img203.imageshack.us/img203/1652/thumbmhv.png (http://img221.imageshack.us/img221/4152/snagit00021306201312071.png)

habib2302
08-07-2013, 10:20
прошу мой скрипт (http://rghost.ru/47283568)

insombia
08-07-2013, 10:38
не нашел тему для пережатия файлов и т д по этому пишу здесь,кому нужно вышла новая версия SrepInside v0.3.1 (http://rghost.ru/47268716)
поддержка распаковки архивов последней версии srep v3.91;
убрал проверку контрольной суммы, т.к. фриарк при распаковке сам ее проверяет.

habib2302 может там 2 файла для удаления? потому что если твоим скриптом все удаляет

habib2302
08-07-2013, 10:51
insombia, сама официальная прога удаляется без проблем,а во время деинсталляции моего репака выдает ошибку

habib2302
08-07-2013, 11:15
если удалить репак через программы и компоненты или тот же самый ccleaner удаляется без всяких проблем,а если удалить при повторном запуске инсталлятора то появляется ошибка.значит что то нетак в инсталляторе

saurn
08-07-2013, 11:18
habib2302, держите
[Code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

const
RT_RCDATA = 10;
APPID_IMAGE_COMPARER = '%7B{D37E8E49-1AA3-401F-BA15-50AB88A2712D}';
WAIT_OBJECT_0 = $0;
STARTF_USESHOWWINDOW = 1;
NORMAL_PRIORITY_CLASS = $00000020;
INFINITE = $FFFFFFFF;

type
_STARTUPINFO = record
cb: DWORD;
#ifdef UNICODE
lpReserved, lpDesktop, lpTitle: PAnsiChar;
#else
lpReserved, lpDesktop, lpTitle: PChar;
#endif
dwX, dwY, dwXSize, dwYSize, dwXCountChars, dwYCountChars, dwFillAttribute, dwFlags: DWORD;
wShowWindow, cbReserved2: Word;
lpReserved2: Byte;
hStdInput, hStdOutput, hStdError: THandle;
end;

_PROCESS_INFORMATION = record
hProcess: THandle;
hThread: THandle;
dwProcessId: DWORD;
dwThreadId: DWORD;
end;

function SetWindowTheme(hwnd: HWND; pszSubAppName: pchar; pszSubIdList: pchar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall delayload';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
#ifdef UNICODE
function CreateProcess(lpApplicationName, lpCommandLine: PAnsiChar; lpProcessAttributes, lpThreadAttributes: Longint; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment, lpCurrentDirectory: PAnsiChar; const lpStartupInfo: _STARTUPINFO; var lpProcessInformation: _PROCESS_INFORMATION): BOOL; external 'CreateProcess{#A}@kernel32.dll stdcall';
#else
function CreateProcess(lpApplicationName, lpCommandLine: PChar; lpProcessAttributes, lpThreadAttributes: Longint; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment, lpCurrentDirectory: PChar; const lpStartupInfo: _STARTUPINFO; var lpProcessInformation: _PROCESS_INFORMATION): BOOL; external 'CreateProcess{#A}@kernel32.dll stdcall';
#endif

var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;
ResultCode: Integer;
lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
BtnImage: TBitmapImage;
CheckLicense: TCheckBox;
iInitialize: Boolean;
TB: TTrackBar;

function GetUninstallPath(const AppIds: array of String): array of String;
var
StringList: TStringList;
i, Len: Integer;
Buff: String;
begin
for i := 0 to GetArrayLength(AppIds)-1 do
begin
Buff := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppIds[i] + '_is1,UninstallString|}'));
if Buff <> '' then
begin
Len := GetArrayLength(Result);
SetArrayLength(Result, Len+1);
Result[Len] := Buff;
end;
end;
end;


procedure UninstallApps(const UninstallPathes: array of String);
var
pi: _PROCESS_INFORMATION;
si: _STARTUPINFO;
i: Integer;
begin
for i := 0 to GetArrayLength(UninstallPathes)-1 do
begin
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWNORMAL;
#ifdef UNICODE
if not CreateProcess('', PAnsiChar(UninstallPathes[i]), 0, 0, False, NORMAL_PRIORITY_CLASS, '', '', si, pi) then
#else
if not CreateProcess('', PChar(UninstallPathes[i]), 0, 0, False, NORMAL_PRIORITY_CLASS, '', '', si, pi) then
#endif
begin
MsgBox(SysErrorMessage(DLLGetLastError), mbCriticalError, MB_OK);
Exit;
end;
try
while WaitForSingleObject(pi.hProcess, INFINITE) <> WAIT_OBJECT_0 do Application.ProcessMessages;
finally
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;
end;
end;

function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
lResStream: TResourceStream;
begin
lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
try
lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
finally
lResStream.Free;
Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
end;
end;

//////////////////////////////////кликабельный лейбл
procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://forum.oszone.net/member.php?u=334581','', '', SW_SHOW, ewNoWait, ErrorCode)
end;
///////////////////////////////////////

function InitializeSetup(): Boolean;
var
i, Len: Integer;
uArray: array of String;
begin
uArray := GetUninstallPath( ['{#SetupSetting("AppID")}', APPID_IMAGE_COMPARER] );
Len := GetArrayLength(uArray);
Result := Len = 0;
if not Result then if MsgBox(CustomMessage('MsgUnins'), mbError, MB_YESNO) = IDYES then
begin
UninstallApps(uArray);
Result := InitializeSetup();
end;
end;

procedure LogoLabelOnClick(Sender: TObject);
begin
ShellExec('open', 'http://www.imagecomparer.com/', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

procedure LicenseOnClick(Sender: TObject);
begin
case TCheckBox(Sender).Checked of
True: WizardForm.LicenseAcceptedRadio.Checked := True;
False: WizardForm.LicenseNotAcceptedRadio.Checked := True;
end;
end;

procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'{#MyAppName}'
end;

procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'{#MyAppName}'
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

procedure TBOnChange(Sender: TObject);
begin
SetTaskBarProgressValue(0, TTrackBar(sender).Position);
end;

procedure InitializeWizard;
begin
WizardForm.LicenseNotAcceptedRadio.Hide;
WizardForm.LicenseAcceptedRadio.Hide;
WizardForm.LicenseMemo.Height := ScaleY(175);

CheckLicense:= TCheckBox.Create(WizardForm);
CheckLicense.Left:= ScaleX(0);
CheckLicense.Top:= ScaleY(216);
CheckLicense.Caption:= WizardForm.LicenseAcceptedRadio.Caption;
CheckLicense.Width:= ScaleX(417);
CheckLicense.OnClick:= @LicenseOnClick;
CheckLicense.Parent:= WizardForm.LicensePage;
with WizardForm do
begin
iInitialize := True;
if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
begin
bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
WizardBitmapImage.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(WelcomePage.Handle);

bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
WizardBitmapImage2.Hide;
ImgSetVisibility(bPicHandle, True);
ImgApplyChanges(FinishedPage.Handle);

lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);

lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(135), ScaleY(38), True, True);
ImgApplyChanges(WizardForm.Handle);
end;

ExtractTemporaryFile('WinTB.dll');
TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
TB:=TTrackBar.Create(Wizardform)

TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 100;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;

TFV:= TStartMenuFolderTreeView.Create(nil);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:= 417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{us erstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;
with TLabel.Create(WizardForm) do
begin
Parent:=WizardForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(20), ScaleY(320), ScaleX(135), ScaleY(38));
OnClick:=@LogoLabelOnClick;
Cursor:= CrHand;
/////////////////////////////////////кликабельный лейбл
with BeveledLabel do
begin
OnClick:=@BevelLabelClick;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;
///////////////////////////////////////
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
Case CurPageID of
wpSelectTasks:
begin
WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
end;
end;
end;

procedure DeinitializeSetup();
begin
if iInitialize then
begin
gdipShutdown;
TaskBarDestroy;
end;
end;

procedure UnLogoLabelOnClick(Sender: TObject);
begin
ShellExec('open', 'http://www.imagecomparer.com/', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

procedure InitializeUninstallProgressForm;
begin
with UninstallProgressForm do
begin
if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
begin
lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
WizardSmallBitmapImage.Hide;
ImgSetVisibility(lPicHandle, True);
ImgApplyChanges(MainPanel.Handle);

lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(320), ScaleX(135), ScaleY(38), True, True);
ImgApplyChanges(UninstallProgressForm.Handle);
end;

with TLabel.Create(nil) do
begin
Parent:=UninstallProgressForm;
AutoSize:=False;
Transparent:= true;
SetBounds(ScaleX(20), ScaleY(320), ScaleX(135), ScaleY(38));
OnClick:=@UnLogoLabelOnClick;
Cursor:= CrHand;
/////////////////////////////////////кликабельный лейбл
with BeveledLabel do
begin
OnClick:=@BevelLabelClick;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;
///////////////////////////////////////
end;

procedure DeinitializeUninstall();
begin
gdipShutdown;
end;

Dinvin4ester
08-07-2013, 21:44
saurn,
Спасибо еще раз . Все получилось .




© OSzone.net 2001-2012