Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
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
Скажите что куда прописать ,чтобы файл - 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.