PDA

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


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

saurn
29-11-2014, 01:06
уже всем известно, как это применяется.. »
Применять можно по разному. А вот на счет ненужности результата - это, как посмотреть. Если та же MoveDir(...) не отработает по какой-либо причине, инсталлятор даже не пикнет, а пользователь останется без обещанного бекапа не подозревая об этом.

studentvnau@vk
29-11-2014, 03:49
Если та же MoveDir(...) не отработает по какой-либо причине, инсталлятор даже не пикнет, а пользователь останется без обещанного бекапа не подозревая об этом. »
Было дело на юникоде, перешёл на анси:)

Larkod
29-11-2014, 19:42
Всем привет. недавно задался таким вопросом. При установки модеов при наведении на данный мод показывается картинка, а как сделать, чтобы сразу две подряд показывало? Вот фрагмент как у меня
case TNewCheckListBox(Sender).ItemCaption[Index] of
'1. Прицел как у 40_tonn': UndefPic := '40_tonn.bmp';
else

Tco 03
29-11-2014, 19:47
Всем привет.
Необходимо в .ini-файл записать только букву диска, куда была установлена программа. Как это можно реализовать, подскажите, пожалуйста.

kotyarko@fb
29-11-2014, 22:23
Было дело на юникоде, перешёл на анси »
SHFileOperation (ведь ты брал с корейки), нужно изменять для Юникода.
А если погуглить - спокойно можно найти ответ за секунду. http://krinkels.org/threads/shfileoperation-i-unicode.2221/

при наведении на данный мод показывается картинка, а как сделать, чтобы сразу две подряд показывало? »
Например, отредактировать это:'40_tonn.bmp' »
изображение.

kotyarko@fb
29-11-2014, 22:42
Необходимо в .ini-файл записать только букву диска, куда была установлена программа. Как это можно реализовать, подскажите, пожалуйста. »
По примеру получения буквы каталога от Johny777 (http://forum.oszone.net/post-1998107-1061.html).
[INI]
Filename: "{app}\Directory.ini"; Section: "Letter"; Key: "Letter1"; String: {code:GetDirectoryLetter}; Flags: uninsdeleteentry

[*Code]
function GetFolderSize(FilePath: string): string;
var
oFS: Variant;
begin
oFS := CreateOleObject('Scripting.FileSystemObject');
Result := oFS.GetDriveName(FilePath);
end;

Function GetDirectoryLetter(Where: String): String;
begin
Where := ExpandConstant('{app}');
Result := GetFolderSize(Where);
end;

Larkod
30-11-2014, 00:40
kotyarko@fb, ты не понял. Чтобы было сразу 2 изображение ну типа этого '1. Прицел как у 40_tonn': UndefPic := '40_tonn.bmp' UndefPic := '40_tonn.bmp';

kotyarko@fb
30-11-2014, 00:43
ты не понял »
Как раз я всё понял. Ты хочешь, чтобы при наведении на компонент отображались два изображения. Так вот, я говорю о том, чтобы эти два изображения объединить в одно, и отображать его.
Если даже и выведутся два изображения (без изменения функции) - одно будет накладываться на второе (т.к. начальная точка - курсор). Без изменения самой функции, которая выводит изображение, вариантов больше нет.

saurn
30-11-2014, 01:24
Было дело на юникоде, перешёл на анси »
String меняйте на AnsiString, PChar на PAnsiChar
--------------------------------------------------------------
Необходимо в .ini-файл записать только букву диска, куда была установлена программа. »

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program


[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPostInstall: SetIniString( 'Setings', 'DriveLetter', ExtractFileDrive( ExpandConstant( '{app}' ) ), ExpandConstant( '{app}\config.ini' ) );
end;
end;

diman_21Ru
01-12-2014, 16:31
В скрипте есть функция По нажатию на компонент выходить соответствующий звук но при нажатие на другой компонент звук проигрывается и там.

#include "Modules\sound modul.iss"

[Setup]
AppName=Sound
AppVerName=1.0
DefaultDirName={pf}\Sound
OutputDir=Output

RawDataResource=SndA:bugreporter_succeeded.wav |SndB:buttonclickreleaseo.WAV

[Components]
Name: "main"; Description: "Main Files";
Name: "main\a"; Description: "A Files";
Name: "main\b"; Description: "B Files";

[Code]
procedure InitializeWizard();
begin
IndexLast := -1;

pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');
pSoundMemory_B := GetResourceSoundAddr('_IS_SNDB');

WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end;

saurn
02-12-2014, 09:09
diman_21Ru

saneksanek
02-12-2014, 09:35
Здрасте,может кто дать код,которые будет удалять данную программу если ее повторна устанавливают.То есть пользователь установил программу,и если пользователь снова запустить setup то вылезет окно на удаление программы,и если пользователь откажется то setup закроется,а если согласится произойдет деинсталляция после чего продолжится установка.

saurn
02-12-2014, 10:34
будет удалять данную программу если ее повторна устанавливают »
#715 (http://forum.oszone.net/post-2176751-715.html)

--------------------------------------------------------------------------------
В расширенной версии возможен и такой способ:
procedure CurStepChanged( CurStep: TSetupStep );
begin
case CurStep of
ssInstall: PerformPreviousUninstall( WizardForm.ProgressGauge );
end;
end;

saneksanek
02-12-2014, 13:30
#715 »
saurn, А реализовать под сгенерированный AppId не как нельзя?

saneksanek
02-12-2014, 14:39
И еще вопрос,есть группа файлов с разной структурой,но название файла у всех одно.Возможно-ли добавь к этим файлам версии чтобы при установке если данный файл с большей версией уже был только что установлен то точно такой же файл,но с меньшей версией не устанавливался.

saurn
03-12-2014, 06:32
А реализовать под сгенерированный AppId не как нельзя? »
RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + ExpandConstant( '{#SetupSetting( "AppId" )}_is1' ), 'UninstallString', Buff )

gvshil
03-12-2014, 15:01
Подскажите, пожалуйста, как реализовать следующее:
Как при удалении программы удалить используемую системой DLL без перезагрузки системы?

kotyarko@fb
03-12-2014, 17:19
Как при удалении программы удалить используемую системой DLL без перезагрузки системы? »
UnloadDLL(ExpandConstant('*.dll'));
DeleteFile(ExpandConstant('*.dll'));
Это имеется ввиду?

gvshil
03-12-2014, 17:53
kotyarko@fb
Можно целиком код?

kotyarko@fb
03-12-2014, 18:21
Можно целиком код? »
Ну так больше ничего и не надо. Просто вставить в то место, откуда он должен будет выгружать и удалять.
[*Code]
Procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
UnloadDLL(ExpandConstant('{app}\library.dll'));
DeleteFile(ExpandConstant('{app}\library.dll'));
end;
end;




© OSzone.net 2001-2012