PDA

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


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

R.i.m.s.k.y.
15-05-2012, 15:02
bugmenotagain, точно так же как и в секции Files, строчка которой была выше

bugmenotagain
15-05-2012, 15:07
R.i.m.s.k.y., про это можно где нибудь почитать?

запутался.

bugmenotagain
15-05-2012, 15:14
не понятно
Source: port\*; DestDir: {app}\port;

у меня так
Source: "C:\Program Files\WinDjView\*"; DestDir: "{app}";

Type: files; Name: {app}\ »
после слеша что писать?

Johny777
15-05-2012, 15:25
bugmenotagain,
твоя проблема решена в этом сообщении
изучай, пользуйся!


угадал! я бы сделал в шаге ssDone удаление ключа реестра из секции реестра "установка/удаление программ" и удаление удалятора
Но может кто-то более красивое решение подскажет »
касательно портативной/не портативной в одном инсталле можно сделать так:
*(работает как часы :). Проверил!)

[Setup]
AppName=My Program
AppVerName=MyProg.exe
DefaultDirName={pf}\SeperTest
AppId=TheBestAppIdEverMade
UninstallFilesDir={app}\uninstall
DirExistsWarning=no
DisablewelcomePage=yes


[Components]
Name: norm; Description: Я простая версия; Flags: exclusive
Name: port; Description: А я портативная; Flags: exclusive


[Files]
Source: port\*; DestDir: {app}\port; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension sortfilesbyname uninsneveruninstall; Components: port
Source: norm\*; DestDir: {app}\norm; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension sortfilesbyname; Components: norm


[ Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
AppPath: string;
ResultCode: Integer;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'InstallLocation', AppPath) then AppPath := RemoveQuotes(AppPath);
if (CurStep = ssDone) and (IsComponentSelected('port')) then Exec(AppPath + '\uninstall\unins000.exe', '/VERYSILENT', '', SW_SHOW, ewNoWait, ResultCode);
end;


вкладываю архив с файлами

bugmenotagain
15-05-2012, 15:54
Johny777, да Я понял что это решение. Я уточняю. пути у всех разные. или мне тупо скопировать?

что мне писать вместо port\* »
свой путь?

Ivan_009
15-05-2012, 17:36
Как сделать так, чтобы при успешной установке на финишной странице загружалась одна картинка а при ошибке другая.Дело в том, что я использую на каждой странице разную картинку через bmp. Распаковка у меня через ISDone. Подскажите пожалуйста... :dont-know

MeХanik
15-05-2012, 17:57
Скажите что куда прописать ,чтобы файл - Game.exe - устанавливался в папку \system
http://php-studia.ru/thumbs/1mym.jpg (http://php-studia.ru/?v=1mym.jpg)

Вот мой инстал :
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{4C9C2778-0018-4EA8-BD69-82E1027FEB7D}
AppName=Shrek 2
AppVersion=1.0
;AppVerName=Shrek 2 1.0
AppPublisher=MeXanik
AppPublisherURL=rutracker.org
AppSupportURL=rutracker.org
AppUpdatesURL=rutracker.org
DefaultDirName={pf}\Shrek 2
DefaultGroupName=Shrek 2
AllowNoIcons=yes
OutputDir=C:\Documents and Settings\Администратор\Рабочий стол\Новая папка
OutputBaseFilename=setup
SetupIconFile=D:\Разное\1336903674_adept_installer.ico
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64

[Languages]
Name: english; MessagesFile: compiler:Languages\English.isl
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; OnlyBelowVersion: 0,6.1

[Files]
Source: D:\Разное\Shrek2-1\System\Game.exe; DestDir: {app}; Flags: ignoreversion
;Source: D:\Разное\Shrek2-1\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: {group}\Shrek 2; Filename: {app}\Game.exe
Name: {group}\{cm:ProgramOnTheWeb,Shrek 2}; Filename: rutracker.org
Name: {group}\{cm:UninstallProgram,Shrek 2}; Filename: {uninstallexe}
Name: {commondesktop}\Shrek 2; Filename: {app}\Game.exe; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\Shrek 2; Filename: {app}\Game.exe; Tasks: quicklaunchicon

[Run]
Filename: {src}\Shrek2.exe; WorkingDir: {app}; Parameters: -x -y -s2 -d.; StatusMsg: Идет распаковка данных, ждите...; Flags: runasoriginaluser
Filename: {app}\system\Game.exe; Description: {cm:LaunchProgram,Shrek 2}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; SubKey: SOFTWARE\Activision\Shrek 2; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\Activision\Shrek 2; ValueType: string; ValueName: StartMenuFolder; ValueData: MeXanik
Root: HKLM; SubKey: SOFTWARE\Activision\Shrek 2; ValueType: string; ValueName: Version; ValueData: 1.00
Root: HKLM; SubKey: SOFTWARE\Activision\Shrek 2; ValueType: string; ValueName: Language; ValueData: 1049
Root: HKLM; SubKey: SOFTWARE\Activision\Shrek 2; ValueType: string; ValueName: UninstallString; ValueData: C:\Program Files\Common Files\InstallShield\Driver\7\Intel 32\Idriver.exe
Root: HKLM; SubKey: SOFTWARE\Activision\Shrek 2; ValueType: string; ValueName: UninstallArgs; ValueData: /M{{7774A6A9-CE0D-4544-9A29-84351BAE184A}

[UninstallDelete]
Name: {app}\*.*; Type: filesandordirs

bugmenotagain
15-05-2012, 18:05
Johny777,
http://i38.fastpic.ru/thumb/2012/0515/fe/387b42c892858cba93d1ac18a86251fe.jpeg (http://fastpic.ru/view/38/2012/0515/387b42c892858cba93d1ac18a86251fe.png.html)
и мне нужна страница приветствия.

R.i.m.s.k.y.
15-05-2012, 18:05
MeХanik,
[Files]
Source: D:\Разное\Shrek2-1\System\Game.exe; DestDir: {app}\System; Flags: ignoreversion

bugmenotagain, это кстати ответ и на твой вопрос про путь тоже
скрипт покажи, что у тебя там за константа reg

bugmenotagain
15-05-2012, 18:09
вот на эту строчку ругается
AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSe tting("AppID")}_is1,InstallLocation|}'));

bugmenotagain
15-05-2012, 18:14
[ Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
AppPath: string;
ResultCode: Integer;
begin
AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSe tting("AppID")}_is1,InstallLocation|}'));
if (CurStep = ssDone) and (IsComponentSelected('port')) then Exec(AppPath + '\uninstall\unins000.exe', '/VERYSILENT', '', SW_SHOW, ewNoWait, ResultCode);
end;

R.i.m.s.k.y.
15-05-2012, 18:49
bugmenotagain, структуру reg: нельзя применять в коде
[ Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
AppPath, key, InstallLocation: string;
ResultCode: Integer;
begin
if (CurStep = ssDone) and (IsComponentSelected('port')) then begin
key := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + ExpandConstant('{#SetupSetting("AppID")}') + '_is1';
RegQueryStringValue(HKLM, key, 'InstallLocation', InstallLocation);
MsgBox('Key = ' + key + #13#10 + 'InstallLocation = ' + InstallLocation, mbInformation, MB_OK);
AppPath := RemoveBackslashUnlessRoot(RemoveQuotes(InstallLocation));
Exec(AppPath + '\uninstall\unins000.exe', '/VERYSILENT', '', SW_SHOW, ewNoWait, ResultCode);
end; //if (CurStep = ssDone) and (IsComponentSelected('port'))
end;

КМК это не сработает, ты ставишь ее и тут же на последнем шаге сносишь, хотя флаг uninsneveruninstall присутсвует, может и сработать
Вот что точно левое так это секция [UninstallDelete]

Johny777
15-05-2012, 18:53
R.i.m.s.k.y.,
у меня пример на предыдущей странице рабочий
я проверял
добавил другую строку на предыдущей странице

R.i.m.s.k.y.
15-05-2012, 18:58
Johny777, я переписал по рабочему, это раз
дваз - неправильно постоянно вычислять ключи, надо их подсунуть под if (CurStep = ssDone)

=============
еще ошибка AppPath имеет на конце \ и ты еще раз приплюсовываешь его же

bugmenotagain
15-05-2012, 19:05
Johny777, Я скопировал ваш скрипт. но он не работает

[ Code] procedure CurStepChanged(CurStep: TSetupStep); var AppPath, key, InstallLocation: string; ResultCode: Integer; begin if (CurStep = ssDone) and (IsComponentSelected('port')) then begin key := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + ExpandConstant('{#SetupSetting("AppID")}') + '_is1'; RegQueryStringValue(HKLM, key, 'InstallLocation', InstallLocation); MsgBox('Key = ' + key + #13#10 + 'InstallLocation = ' + InstallLocation, mbInformation, MB_OK); AppPath := RemoveQuotes(InstallLocation); Exec(AppPath + '\uninstall\unins000.exe', '/VERYSILENT', '', SW_SHOW, ewNoWait, ResultCode); end; //if (CurStep = ssDone) and (IsComponentSelected('port')) end; »
в конце установки http://i38.fastpic.ru/thumb/2012/0515/cf/965e11fd837c34c1982f3ff57c228bcf.jpeg (http://fastpic.ru/view/38/2012/0515/965e11fd837c34c1982f3ff57c228bcf.png.html)
и теперь в назначенную папку вообще ничего не распаковывается. пустая

R.i.m.s.k.y.
15-05-2012, 19:12
bugmenotagain, вот для этого я и поставил MSGBox
смотри пути где ищет удалятор и куда ставишь
Согласно твоему коду он ищет в InstallLocation = ...
А ты где его ждешь?

bugmenotagain
15-05-2012, 19:14
R.i.m.s.k.y., Согласно твоему коду »
Я ваш скрипт скопировал и все.

R.i.m.s.k.y.
15-05-2012, 19:33
bugmenotagain,
не путай меня, я сам запутаюсь
Папки раскидывал ты
итак, что куда копируется? четко, внятно
где должен лежать удалятор, куда ставится портабельная и полная версия

bugmenotagain
15-05-2012, 19:41
R.i.m.s.k.y.,
куда ставится портабельная и полная версия »
по умолчанию просится C:\Program Files\WinDjView
ну папку можно естественно изменить.
удалятор должен лежать как положено в папке программе.
в portable нет никакого удалятора, это просто набор файлов скопировать и все.

Johny777
15-05-2012, 20:13
R.i.m.s.k.y.,
приношу свои извинения, тк мой пример состоит на половину из лишнего кода :)
только сейчас допёрло, что на шаге ssDone константа {app} ещё существует, а это всё упрощает и укорачивает!
Вот:

[Setup]
AppName=My Program
AppVerName=MyProg.exe
DefaultDirName={pf}\SeperTest
UninstallFilesDir={app}\uninstall

[Components]
Name: norm; Description: Я простая версия; Flags: exclusive
Name: port; Description: А я портативная; Flags: exclusive

[Files]
Source: port\*; DestDir: {app}\port; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension sortfilesbyname uninsneveruninstall; Components: port
Source: norm\*; DestDir: {app}\norm; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension sortfilesbyname; Components: norm

[ Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if (CurStep = ssDone) and (IsComponentSelected('port')) then Exec(ExpandConstant('{app}\uninstall\unins000.exe'), '/VERYSILENT', '', SW_SHOW, ewNoWait, ResultCode);
end;

(Проверил. Работает)
наглядный пример прилагается в архиве




© OSzone.net 2001-2012