Показать полную графическую версию : [архив] Inno Setup .:[все вопросы]:.
подскажите как в окне приветствия сдвинуть границу между логотипом и текстом - тоесть чтоб картинки было больше
следующий вопрос по сложнее -) - как в окне где показывается процес установки - чуть выше бегунка прогресса инсталляции поместить видео-ролик - тоесть при инсталляции чтобы играло видео
да, и появилось уже какое то решение убрать окно о программе не конфликтующее с форматированием rtf файлов ?
Какой синтакс у этого вызова в реестре?
Вот это например понятно
\??\source file
!\??\target file
Переименование нам не нужно, хотя это следует даже из названия, но тем не менее этим ключём можно и удалять!
http://www.pcreview.co.uk/forums/thread-1715654.php
Но я так и не понял всётаки логику, сколько и где надо нулей -
WXP: Right-click the value, choose "Modify Binary Data", click at the
end of the hex string, enter 0000 (four zeros)
Это на словах так легко выглядит! Но я делаю инсталяторы и вот что я нашёл методом подбора-
{olddata} - это предыдущая запись; {break} - это "00" нули; записи соответственно прибавляются друг за другом.
"PendingFileRenameOperations"; ValueData: "{olddata}{break}{break}\??\{sys}\mmc.ko"
"PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{sys}\mmcbase.ko"
"PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{sys}\mmcndmgr.ko"
"PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{sys}\hnetwiz.ko"
"PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{sys}\taskmgr.ko{break}{break}"
Все другие способы не работают почему-то, хотя логика этого мне тоже не понятна! Ну например зачем в начале нужно {break}{break}?
Да и в конце зачем, одного чтоль мало? Причём похоже что реестр сам прибавляет ещё один байт нулей "00"
Но моя запись работает, а проблемма в том что если запустить друг за другом два инсталлера с подобным кодом,
то записи одного из них будут проигнорированны... А мне какраз нужно много инсталлеров!
Кароче сколько там нулей вообще непонятно.
Пока что получается из моих наблюдений такое
{старая_запись} 00 00 \??\Файл1_для_удаления
{старая_запись} 00 \??\Файл2_для_удаления
{старая_запись} 00 \??\Файл3_для_удаления 00 00
Но два раза записать из инсталлеров вызовет проблемму! Один работает нормально...
??
semiono, пережде всего, нужно было написать, что вы делаете инсталляторы на Inno Setup и спрашивать в соответствующей теме (http://www.forum.oszone.ru/thread-60604.html).
{olddata} - это предыдущая запись »
{olddata} - означает, что если этот параметр в реестре существует, то он будет дополнен, а не перезаписан.
{break} - это "00" нули »
{break} - это четыре нуля, если быть точнее и означает переход на новую строку.
Все эти команды действительны для REG_MULTI_SZ.
{старая_запись} 00 00 \??\Файл1_для_удаления »
Не понятно, что означают ваши вопросы в строке.
{olddata}{break}{break}\??\{sys}\mmc.ko »
Зачем {break} - перевод в строки в начале записи, это должна сделать предыдущая запись. У вас должно быть так:
{olddata}{sys}\mmc.ko{break}
P.S.
И мне не совсем понятна, суть вашего вопроса...
Привет всем, уважаемые программисты! Помогите мне (чайнику) разобраться с моим скриптом.
Задача простая.
Мой сетап должен ставить в каталог с программой дополнительные файлы (что он успешно и делает), но при этом необходимо сделать до инсталяции резервную копию одного из заменяемых файлов (вот тут то и проблема, не хочет работать).
При деинсталяции резервный файл надо вернуть на место (до этого еще не дошел).
Файл предполагается копировать в папку "backup" , которая должна создаться в том же каталоге куда инсталятся файлы.
Вот код скрипта полностью:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
AppName=Death a Board (beta5)
AppVerName=Дополнение к Left 4 Dead
DefaultDirName=C:\Program Files\Steam\SteamApps\Common\left4dead
DefaultGroupName=Death a Board (beta5)
DisableProgramGroupPage=yes
OutputDir=E:\Загрузки\Output
OutputBaseFilename=setup
SetupIconFile=E:\Left4Dead\left4dead\Left 4 Dead Demo.ico
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: "E:\Загрузки\Output\left4dead\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
s1, s2: string;
begin
s1:=ExpandConstant('{app}')+'\resource\UI\L4D360UI\LoadingPosters.res';
s2:=ExpandConstant('{app}')+'\Backup\left4dead\resource\UI\L4D360UI';
If FileExists(s1) then
begin
CreateDir(s2);
FileCopy(s1, s2+'\LoadingPosters.res', True);
end;
end;
BlackSelf
03-06-2009, 02:49
dinazav, попробуйте так:
[Setup]
AppName=Death a Board (beta5)
AppVerName=Дополнение к Left 4 Dead
DefaultDirName=C:\Program Files\Steam\SteamApps\Common\left4dead
DefaultGroupName=Death a Board (beta5)
DisableProgramGroupPage=yes
OutputDir=E:\Загрузки\Output
OutputBaseFilename=setup
SetupIconFile=E:\Left4Dead\left4dead\Left 4 Dead Demo.ico
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: "E:\Загрузки\Output\left4dead\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[_Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
CopyFiles(ExpandConstant('{app}\resource\UI\L4D360UI'),ExpandConstant('{app}\Backup\resource\UI\L4D3 60UI'),('LoadingPosters.res'));
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveFiles(ExpandConstant('{app}\Backup\resource\UI\L4D360UI\'),ExpandConstant('{app}\resource\UI\L4D 360UI\'),('LoadingPosters.res'));
RemoveDir(ExpandConstant('{app}\Backup'));
end;
end;
Я боюсь что этот вопрос выходит за пределы InnoSetup, причём я обычно не использую
restartreplace флаги, так как мне не нужны диалоги в инсталлере.
Поэтому пытаюсь удалять файлы "ручным способом", кстати это даже интересно.
{break} - это четыре нуля »
Не уверенн, но раз вы говорите проверю.
Не понятно, что означают ваши вопросы в строке. »
Это правильная запись сетевых по-моему устройств, не знаю точно, но по крайней мере
это майкрософт придумано - \??\C:\windows...
Хотя я думаю вы в курсе, просто можно было подумать что это я что-то там зашифровал :)
Хотя я не пробовал напрямую писать без '\??\' может и не будет валидным?
Зачем {break} - перевод в строки в начале записи »
Я и сам удивлён, но другие варианты у меня никакие не работают!
Хотя я думаю что есть альтернатива? Суть вопроса какраз в том, как правильно удалять
используя PendingFileRenameOperations, но меня не один файлик интересует, а сразу много!
Причём с возможностью добавлять строки из разных подряд запускаемых инсталяторов.
То что вы говорите что брейк вначале не нужен - это верно и я это тоже знаю,
но почему-то на практике работает только именно как у меня было.
Просто если второй инсталятор запишет позади свой код то он уже не будет выполняться.
А вот многократный запуск одного и того же инсталятора хотя он и начинает
дублировать записи но тем не менее файлы будут удалены всё как положенно.
Наверное два инсталлера суммируют какой-то сдвиг по нулям {break} и происходит косяк! :)
---
То что я записываю в виде:
ValueData: "{olddata}{break}{break}\??\{sys}\mmc.ko"
ValueData: "{olddata}{break}\??\{sys}\mmcbase.ko"
это не принципиально, просто так удобнее код контролировать, хотя можно и в строчку всё оформить:
ValueData: "{olddata}{break}{break}\??\{sys}\mmc.ko{break}\??\{sys}\mmcbase.ko итакдалее"
-Marshall-
03-06-2009, 12:50
Подскажите пожалуйста, как сделать так, чтоб инсталлятор не могли распаковать, как это сделано у Boss911 в его трансформ-паке?
Я боюсь что этот вопрос выходит за пределы InnoSetup »
А вы не бойтесь... это как раз и есть вопрос по Inno Setup.
причём я обычно не использую
restartreplace флаги, так как мне не нужны диалоги в инсталлере. »
Не понятно, причём тут флаг restartreplace и диалоги в инсталляторе?
restartreplace
Этот флаг необходим при перемещении системных файлов ядра. Если файл существовал ранее и оказался заблокирован инсталлятором из-за невозможности его переместить, инсталлятор зарегистрирует файл (в WININIT.INI или используя MoveFileEx для Windows и Windows NT соответственно), чтобы переместить его после перезагрузки системы. Когда это произойдет, пользователю будет предложено перезагрузить компьютер в конце установки.
Поэтому пытаюсь удалять файлы "ручным способом" »
Вы имеете в виду не создаёте деинсталлятор?
Это правильная запись сетевых по-моему устройств, не знаю точно, но по крайней мере
это майкрософт придумано - \??\C:\windows... »
Вот здесь, я с вами не согласен, это скорей всего, попытка не правильной перекодировки из формата Unicode в ANSI...
Вообще, все инсталляторы делают люди и нельзя сказать с уверенностью, что если вы увидели такую запись у себя в реестре, после установки, какой-нибудь переупакованной игры, что именно эта запись верная... Потому, что перед установкой игры, если цель переупаковать инсталлятор, обычно делают снимок реестра и вместе с нужными ключами реестра для этой игры, пихают весь свой хлам из системы, что вообще не относится к данному инсталлятору. В итоге, получается бардак с реестром. ИМХО.
Суть вопроса какраз в том, как правильно удалять
используя PendingFileRenameOperations, но меня не один файлик интересует, а сразу много! »
Что вы удаляете? откуда? И честное слово, я не телепат... Если вы действительно хотите получить помощь, то показывайте скрипт и объясните нормально, для чего вам записи в PendingFileRenameOperations? и как на основе этих записей вы, что-то собрались удалять?
Одним словом, вопросов встречных много...
P.S.
Вот вам пример скрипта, устанавливайте, сколько угодно раз и всегда будет дописываться ещё одна строка...
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Registry]
Root: HKLM; SubKey: SOFTWARE\My Program; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\My Program; ValueType: multisz; ValueName: My Program; ValueData: {olddata}My Program{break}; Flags: uninsdeletevalue uninsdeletekeyifempty
И извините, за мою неточность: {break} - это шесть нолей...
-Marshall-, используйте шифрование инсталлятора...
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
Password=-Marshall-
Encryption=True
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}
[_Code]
// пропускаем страницу с вводом пароля
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID = wpPassword then begin
WizardForm.PasswordEdit.Text := '-Marshall-';
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;
Вы имеете в виду не создаёте деинсталлятор? »
Да, uninstall у меня тоже отсутствует.
Вот здесь, я с вами не согласен, это скорей всего, попытка не правильной перекодировки из формата Unicode в ANSI »
Я не знаю, но можно посмотреть сюда, где полно таких же записей:
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
Вообще в разделе SYSTEM\Services я встречал какие угодно записи, например
%SystemRoot%\System32 и тут же \SystemRoot\System32 и всё это записи майкрософт по большому счёту,
всмысле если даже \??\ это не правильная запись от \??\\ я тоже с этим согласен. :)
Что вы удаляете? откуда? И честное слово, я не телепат »
А какая разница что, если надо удалять? :)
Конечно же открытые и не доступные для удаления файлы!
К примеру, я заменил Icons ресурсы в taskmgr.exe, или если пофантазировать русифицыровал его, хотя это навряд ли. Впрочем, я ошибаюсь taskmgr легко итак заменить, а вот какие-то DLL ну скажем даже shell32.dll,
то это без перезагрузки не получиться. Сначала я переименовываю файл в shell32.old, потом удаляю.
Если вы действительно хотите получить помощь, то показывайте скрипт »
Часть скрипта в первом посте, весь целиком он не интересен и большой. Суть вообще-то понятна я думаю..?
: {break} - это шесть нолей... »
Вы меня опять убили :)
Я так и не проверял ещё, но раньше вроде заглядывал и между записями путей вроде бы 00 00 было!?...
Где-то это продокументированно в Inno хелпе чтоли?
Пример установки PowerISO:
[Setup]
AppName=PowerISO
AppVerName=PowerISO 4.4.0.0
AllowUNCPath=yes
DefaultDirName={code:GetPath}
DirExistsWarning=no
DisableDirPage=yes
DisableFinishedPage=no
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=no
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=..\..\SVCPACK
OutputBaseFilename=PowerISO
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=Semiono
VersionInfoCopyright=2001-2005 GmbH
VersionInfoDescription=PowerISO
VersionInfoTextVersion=4.4.0.0
VersionInfoVersion=4.4.0.0
Uninstallable=no
UsePreviousAppDir=no
SetupIconFile=.\Patch\PowerISO.ico
WizardImageFile=.\Patch\PowerISO.bmp
[Messages]
BeveledLabel= AMD64 +
[Сode]
var
Dir: String;
function GetPath(Param: String): String;
var
S: TArrayOfString;
F: String;
begin
F := Dir + 'PowerISO';
if not FileExists(F) then
Result := ExpandConstant('{pf}\PowerISO')
else
begin
LoadStringsFromFile(F, S);
Result := S[0];
end;
end;
function InitializeSetup(): Boolean;
begin
Dir := ExpandConstant('{sd}\');
Result := True;
end;
procedure InitializeWizard();
begin
try
DeleteFile(ExpandConstant('{sys}\drivers\scdemu.o'))
RenameFile(ExpandConstant('{sys}\drivers\scdemu.sys'),ExpandConstant('{sys}\drivers\scdemu.o'))
except
Beep; Exit;
end;
try
DeleteFile(ExpandConstant('{code:GetPath}\pwrisosh.o'))
RenameFile(ExpandConstant('{code:GetPath}\pwrisosh.dll'),ExpandConstant('{code:GetPath}\pwrisosh.o') )
except
Beep; Exit;
end;
try
DeleteFile(ExpandConstant('{code:GetPath}\pwrisovm.o'))
RenameFile(ExpandConstant('{code:GetPath}\pwrisovm.exe'),ExpandConstant('{code:GetPath}\pwrisovm.o') )
except
Beep; Exit;
end;
end;
procedure DeinitializeSetup();
var
S: TArrayOfString;
F: String;
begin
F := ExpandConstant('{sys}\PowerISO.cmd');
SetArrayLength(S, 1);
S[0] := ExpandConstant('@start {code:GetPath}\PowerISO.exe "%1" %*');
SaveStringsToFile(F, S, False);
end;
[Dirs]
Name: "{code:GetPath}"; Attribs: readonly; Flags: uninsneveruninstall; Permissions: admins-full
[Icons]
Name: "{userprograms}\PowerISO"; Filename: "{code:GetPath}\PowerISO.exe"; WorkingDir: "{code:GetPath}"; IconIndex: 0; Comment: "PowerISO"
Name: "{sendto}\PowerISO"; Filename: "{code:GetPath}\PowerISO.exe"; WorkingDir: "{code:GetPath}"; IconIndex: 0; Comment: "PowerISO"
[Registry]
; Run
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\PowerISO.exe"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\PowerISO.exe"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\PowerISO.exe"; ValueType: string; ValueName: "Path"; ValueData: "{code:GetPath}"; Flags: noerror; Permissions: admins-full
; Labels
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\PowerISO"; ValueType: string; ValueName: ""; ValueData: "&PowerISO"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\PowerISO\command"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\PowerISO.exe"; Flags: noerror; Permissions: admins-full
; Delete
Root: HKCU; Subkey: "Software\PowerISO"; Flags: deletekey noerror; Permissions: admins-full
; PowerISO
Root: HKCU; Subkey: "Software\PowerISO"; ValueType: binary; ValueName: "USER"; ValueData: "xx xx xx ... b3 88"; Flags: noerror; Permissions: admins-full
Root: HKCU; Subkey: "Software\PowerISO"; ValueType: binary; ValueName: "MainWindow"; ValueData: "90 00 00 00 86 00 00 00 60 03 00 00 50 02 00 00 00 00 00 00"; Flags: noerror; Permissions: admins-full
Root: HKCU; Subkey: "Software\PowerISO"; ValueType: dword; ValueName: "Language"; ValueData: "$00000409"; Flags: noerror; Permissions: admins-full
Root: HKCU; Subkey: "Software\PowerISO"; ValueType: dword; ValueName: "ShellIntegration"; ValueData: "$00000001"; Flags: noerror; Permissions: admins-full
Root: HKCU; Subkey: "Software\PowerISO"; ValueType: dword; ValueName: "Status"; ValueData: "$00000005"; Flags: noerror; Permissions: admins-full
Root: HKCU; Subkey: "Software\PowerISO"; ValueType: string; ValueName: "Install_Dir"; ValueData: "{code:GetPath}"; Flags: noerror; Permissions: admins-full
Root: HKCU; Subkey: "Software\PowerISO\SCDEmu"; ValueType: dword; ValueName: "DiskCount"; ValueData: "$00000000"; Flags: noerror; Permissions: admins-full
Root: HKCU; Subkey: "Software\PowerISO\SCDEmu"; ValueType: dword; ValueName: "FLAGS"; ValueData: "$00000000"; Flags: noerror; Permissions: admins-full
; PowerISO File
Root: HKLM; Subkey: "Software\Classes\.daa"; ValueType: string; ValueName: ""; ValueData: "PowerISO"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\.iso"; ValueType: string; ValueName: ""; ValueData: "PowerISO"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\.uif"; ValueType: string; ValueName: ""; ValueData: "PowerISO"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\PowerISO"; ValueType: string; ValueName: ""; ValueData: "PowerISO File"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\PowerISO\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\PowerISO.exe,0"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\PowerISO\shell\open\command"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\PowerISO.exe ""%1"""; Flags: noerror; Permissions: admins-full
; Delete
Root: HKLM32; Subkey: "Software\PowerISO"; Flags: deletekey noerror; Permissions: admins-full
; ContextMenuHandlers
Root: HKLM; Subkey: "Software\Classes\*\shellex\ContextMenuHandlers\PowerISO"; ValueType: string; ValueName: ""; ValueData: "{{967B2D40-8B7D-4127-9049-61EA0C2C6DCE}"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\Folder\shellex\ContextMenuHandlers\PowerISO"; ValueType: string; ValueName: ""; ValueData: "{{967B2D40-8B7D-4127-9049-61EA0C2C6DCE}"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\Directory\shellex\ContextMenuHandlers\PowerISO"; ValueType: string; ValueName: ""; ValueData: "{{967B2D40-8B7D-4127-9049-61EA0C2C6DCE}"; Flags: noerror; Permissions: admins-full
; Approved
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"; ValueType: string; ValueName: "{{967B2D40-8B7D-4127-9049-61EA0C2C6DCE}"; ValueData: "PowerISO"; Flags: noerror; Permissions: admins-full
; Services
Root: HKLM; Subkey: "System\ControlSet001\Services\SCDEmu"; ValueType: dword; ValueName: "ErrorControl"; ValueData: "$00000001"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "System\ControlSet001\Services\SCDEmu"; ValueType: dword; ValueName: "MaxDiskCount"; ValueData: "$00000008"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "System\ControlSet001\Services\SCDEmu"; ValueType: dword; ValueName: "Start"; ValueData: "$00000001"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "System\ControlSet001\Services\SCDEmu"; ValueType: dword; ValueName: "Type"; ValueData: "$00000001"; Flags: noerror; Permissions: admins-full
; PendingFileRenameOperations
Root: HKLM; Subkey: "System\ControlSet001\Control\Session Manager"; ValueType: multisz; ValueName: "PendingFileRenameOperations"; ValueData: "{olddata}{break}{break}\??\{sys}\drivers\scdemu.o"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "System\ControlSet001\Control\Session Manager"; ValueType: multisz; ValueName: "PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{code:GetPath}\pwrisosh.o"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "System\ControlSet001\Control\Session Manager"; ValueType: multisz; ValueName: "PendingFileRenameOperations"; ValueData: "{olddata}{break}\??\{code:GetPath}\pwrisovm.o{break}{break}"; Flags: noerror; Permissions: admins-full
[Files]
Source: "T:\Process\Lang\*"; DestDir: "{code:GetPath}\Lang"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full
Source: "T:\Process\Skins\*"; DestDir: "{code:GetPath}\Skins"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full
Source: "T:\Process\desktop.ini"; DestDir: "{code:GetPath}"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full
Source: "T:\Process\piso.exe"; DestDir: "{code:GetPath}"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full
Source: "T:\Process\PowerISO.chm"; DestDir: "{code:GetPath}"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full
Source: "T:\Process\PowerISO.exe"; DestDir: "{code:GetPath}"; Flags: ignoreversion overwritereadonly touch; Permissions: admins-full
Source: "T:\Process\pwrisosh32.dll"; DestDir: "{code:GetPath}"; DestName: "pwrisosh.dll"; Flags: noregerror onlyifdoesntexist regserver touch; Check: not IsWin64; Permissions: admins-full
Source: "T:\Process\pwrisosh64.dll"; DestDir: "{code:GetPath}"; DestName: "pwrisosh.dll"; Flags: noregerror onlyifdoesntexist regserver touch; Check: IsWin64; Permissions: admins-full
Source: "T:\Process\pwrisovm.exe"; DestDir: "{code:GetPath}"; Flags: onlyifdoesntexist touch; Permissions: admins-full
Source: "T:\Process\setup64.exe"; DestDir: "{code:GetPath}"; Flags: onlyifdoesntexist touch; Check: IsWin64; Permissions: admins-full
Source: "T:\System\drivers\scdemu32.sys"; DestDir: "{sys}\drivers"; DestName: "scdemu.sys"; Flags: onlyifdoesntexist touch; Check: not IsWin64; Permissions: admins-full
Source: "T:\System\drivers\scdemu64.sys"; DestDir: "{sys}\drivers"; DestName: "scdemu.sys"; Flags: onlyifdoesntexist touch; Check: IsWin64; Permissions: admins-full
BlackSelf, спасибо за помощь. Но мой скрипт создан в Inno Setup 5.1.12 и на такие функции как "CopyFiles", "MoveFiles" и "RemoveDir" компилятор ругается... Мож изменить чего надо?
все поставил ISToll 5.2 на функции не ругается, но по прежнему не хочет делать резервную копию файла
Я не знаю, но можно посмотреть сюда, где полно таких же записей:
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices »
Сказать честно, никогда туда не заглядывал и действительно, есть такие вопросы в путях...
Я так и не проверял ещё, но раньше вроде заглядывал и между записями путей вроде бы 00 00 было!?...
Где-то это продокументированно в Inno хелпе чтоли? »
Нет, это из моего опыта.
Пример установки PowerISO: »
из вашего кода не понятно, для чего вам ; PendingFileRenameOperations, но надо записывать, как я уже и говорил ранее:
ValueData: "{olddata}\??\{sys}\drivers\scdemu.o{break}";
ValueData: "{olddata}\??\{code:GetPath}\pwrisosh.o{break}";
ValueData: "{olddata}\??\{code:GetPath}\pwrisovm.o{break}";
Проверил запись в реестре, все появляется как надо...
P.S.
К сожалению ни программы PowerISO, ни скрипта для неё у меня не оказалось, но насколько я знаю ключ HKEY_LOCAL_MACHINE\System\ControlSet001\... - никаким боком не относится к программе.
Спасибо за конструктивный разговор! Хорошо что я свою тему Inno Setup нашёл, хотя я изначально сомневался,
так как часто бывает по инсталлеру обсуждают сугубо конкретные инсталерные дела.
Но мне иногда бывает понадобиться чтонибудь этакое o_0 :)
Самое главное чтоб разговор был конструктивным, чтобы можно было больше узнать. :)
HKLM\System\ControlSet001\... - никаким боком не относится к программе. »
В нём регистрируется служба использующая драйвер scdemu.sys, который поставляется вместе с приложением, это сервис виртуальных CD-ROM от PowerISO программы.
из вашего кода не понятно, для чего вам ; PendingFileRenameOperations »
Для того чтобы удалить возможно имеющиеся файлы от предыдущей версии, (для установки поверх и поверх себя)
1. scdemu.sys (> scdemu.o) - я не уверен, возможно что драйвер(ы) можно просто даже удалять?
2. pwrisosh.dll - этот файл обычное расширение проводника, тоесть он регистрируется как
regsvr32 /s pwrisosh.dll
из чего понятно что шел его не даст так просто удалить, поэтому я сначало его переименовываю
в секции [code] а потом удаляю как pwrisosh.o
3. pwrisovm.exe - а это менеджер CR-ROM, вполне возможно что он будет торчать в системном трее,
и удалить тогда напрямую него нельзя, то же самое pwrisovm.exe > pwrisovm.o и делет через пендинг =)
У меня цель исключить все вопросы и диалоги в непредвиденной ситуации,
инсталятор должен сам решать и принимать решения, при условии что он грамотно сконструирован.
Проверил запись в реестре, все появляется как надо... »
Если не поленитесь проверьте? Я уверен что файлы не будут удалены.
Можно попрактиковаться с
C:\New Text Document.txt
C:\New Text Document (2).txt
"\\?\"
Вот страничка какраз нашлась File Names, Paths, and Namespaces
http://msdn.microsoft.com/en-us/library/aa365247(VS.85,printer).aspx
так как часто бывает по инсталлеру обсуждают сугубо конкретные инсталерные дела. »
Так ведь это и есть инсталерные дела... :)
Самое главное чтоб разговор был конструктивным, чтобы можно было больше узнать. »
Это всё зависит от собеседников. :)
Для того чтобы удалить возможно имеющиеся файлы от предыдущей версии, (для установки поверх и поверх себя) »
Из приведённого вами кода этого не видно, т.е. в скрипте нет обращений к данной ветке реестра для проверки значений и на основании этого выполнения каких-либо действий инсталлятором.
из чего понятно что шел его не даст так просто удалить, поэтому я сначало его переименовываю
в секции а потом удаляю как pwrisosh.o »
Интересное решение.
инсталятор должен сам решать и принимать решения, при условии что он грамотно сконструирован. »
Это верное замечание, но не в обиду вам сказано, я бы не хотел использовать ваши инсталляторы на своей системе. Хотя подход к реализации некоторых вещей, интересен, но всё же объясняю почему - нет:
У пользователя всегда должно быть право удалить установленную программу, всегда должен быть выбор, при этом о виртуозности и профессионализме человека, который делал инсталлятор, говорит то, что после удаления не остаётся никаких хвостов, т.е. удаляются все установленные службы в системе и записи в реестре, сделанные этой программой.
Если не поленитесь проверьте? Я уверен что файлы не будут удалены. »
т.е. мне в ручную создать эти файлы и попытаться удалить их инсталлятором в процессе установки?
если да, то использовал скрипт и всё нормально удалилось:
[code][Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
[_Code]
procedure CurPageChanged(CurPageID: Integer);
var
file1, file2: string;
begin
If CurPageID = wpInstalling then
begin
file1:= ExpandConstant('{sd}\New Text Document.txt');
file2:= ExpandConstant('{sd}\New Text Document(2).txt');
if FileExists(file1) then
if DeleteFile(file1) then
MsgBox('Файл: ' + ExtractFileName(file1) + ' успешно удалён!', mbInformation, MB_OK)
else MsgBox(ExtractFileName(file1) + ' - облом!', mbInformation, MB_OK);
if FileExists(file2) then
if DeleteFile(file2) then
MsgBox('Файл: ' + ExtractFileName(file2) + ' успешно удалён!', mbInformation, MB_OK)
else
MsgBox(ExtractFileName(file2) + ' - облом!', mbInformation, MB_OK);
end;
end;
Вот страничка какраз нашлась File Names, Paths, and Namespaces »
Спасибо, я этого не знал... :)
Serega_, ведь вы удалили файлы которые свободно можно удалить.
Но я имел ввиду используя PendingFileRenameOperations, чтобы проверить работу самого параметра.
И тут уже не важно что именно это за файлы, так как если помните разговор был об нулях...
Но это уже даже не нужно, так как пару решений снова возникло. :)
Для того чтобы проверить правильность записей, можно использовать это
; http://flatassembler.net/fasmw16738.zip
include '%fasm%\win32wx.inc' ; здесь нужно записать корректно!
section '.code' code readable executable
start:
invoke MoveFileEx,lpExistingFileName1,NULL,MOVEFILE_DELAY_UNTIL_REBOOT
invoke MoveFileEx,lpExistingFileName2,NULL,MOVEFILE_DELAY_UNTIL_REBOOT
invoke MoveFileEx,lpExistingFileName3,NULL,MOVEFILE_DELAY_UNTIL_REBOOT
invoke ExitProcess,0
lpExistingFileName1 db '\\?\C:\New Text Document.txt',0
lpExistingFileName2 db '\\?\C:\New Text Document (2).txt',0
lpExistingFileName3 db '\\?\C:\New Text Document (3).txt',0
data import
library kernel32,'KERNEL32.DLL'
import kernel32,ExitProcess,'ExitProcess',MoveFileEx,'MoveFileExA'
end data
section '.rsrc' resource data readable
directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions
resource icons,1,LANG_NEUTRAL,icon_data
resource group_icons,17,LANG_NEUTRAL,main_icon
resource versions,1,LANG_NEUTRAL,version
icon main_icon,\
icon_data,'%SystemRoot%\Icons\exec.ico'
Получается, что нулей между строками пять! Использование этой API вообще меня обрадовало,
так как записи сами добавляются в хвост, без всяких {olddata}
Можно даже этим бинарем и пользоваться как внешним скриптом. :)
Но есть и другое решение. Я же изначально знал что NSIS переименовывает файлы а не удаляет.
Но я что-то сам комплексовал и тупил. Почему-то мне показалось это не надёжно то ли не совсем очевидно.
Но я всётаки сейчас понял как всё должно быть, правда ещё сказалось то что я наконец-то прочитал документацию, как они пишут что PendingFileRenameOperations запускается после chkdsk ещё до старта оболочки, тоесть можно смело переименовывать файлы, а зачем их тогда удалять!
Именно так nsis инсталлер и делает. Просто копируется новый файл как *.tmp и на загрузке он копируется
скажем в shll32.dll. То есть я лишнего намудрил с удалениями *.old
я бы не хотел использовать ваши инсталляторы на своей системе. »
Это не удивительно, и я знаю об этом. :)
Но просто у меня с инсталлерами это целая философия. Вообще это часть "моей системы" winxp,
которую я собираю для себя. Но всё же хочется верить что и ктонить ещё установит.
Я просто думаю о том, что многие программы, практически все устанавливаются поверх себя сколько угодно раз.
Приложения должны устанавливаться в %ProgramFiles% за исключением каких-то гигантов.
Просто потому что {pf} уже придуманна и её проще целиком переименовать и переместить если не нравиться то что есть.
uninst.exe - хотя и очень маленький файл, но тем не менее по большому счёту хлам.
Я всё же расчитываю немного на продвинутого пользователя, чтобы удалить программу достаточно
удалить её папку [del] и если надо затереть ключи в software разделах реестра.
Остальное можно расчистить любым рег-клинером.
Но самое глдавное, что на самом деле эти записи не на что не влияют.
Да и на размере реестра это не сказывается. Если записи актуальные, то новая интсаляция перепишет их.
Тут дело ещё и в том, что например Adobe Reader во-первых засоряет не на шутку HKLM\Software\Classes,
вдобавок пишет тонны хешей в uninstall ветку реестра, это уже работает MSI интсаллер.
Я одинакого обхожу стороной их обоих. И как бы нахально заявляю что мои програмки все не проблемные
и даже если не нужны совершенно, то не стоит их удалять, так как они никому не мешают.
Хотя о вкусах конечно можно поспорить. :)
Вообщем я сначала делаю а потом меня пусть осудят ))
Я надеюсь не сильно ругать будут ))
Сейчас стал пробираться в 64 битную WinXP, слежу чтобы инсталятор правильно работал и там.
Поначалу массу ошибок понаделал, так как я думал HKCU32 это панацея от всего, но как оказалось
такого ключа вообще нет, а есть только HKLM32 тоесть ссылка на HKLM\Software\wow6432node,
что гораздо чаще используется так как приложения в большинстве своём 32 битные.
Но ито там думать приходиться так как ярлык
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Cpuz"; ValueType: string; ValueName: ""; ValueData: "&Cpuz"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Cpuz\command"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\Cpuz.exe"; Flags: noerror; Permissions: admins-full
просто не будет виден из HKLM32 под 64 битным проводником ;-
если да, то использовал скрипт и всё нормально удалилось: »
а в паскале я очень тяжело разбираюсь :(
чтобы что либо написать самостоятельно гуглю часами :) как и в остальном всём
Привет всем, есть sfx архив data.exe созданный freearc'ом, есть у кого примерчик как прикрутить второй прогрессбар, что бы он был чуть ниже основного или его продолжением и показывал сколько процентов осталось. С Serega_Inc. скриптом не могу разобраться ведь с sfx должно быть вроде попроще.
Получается, что нулей между строками пять! »
Не согласен, вот пример экспортированного ключа реестра:
"SystemBiosVersion"=hex(7):47,00,42,00,54,00,20,00,20,00,20,00,20,00,2d,00,20,\
00,34,00,32,00,33,00,30,00,32,00,65,00,33,00,31,00,00,00,41,00,77,00,61,00,\
72,00,64,00,20,00,4d,00,6f,00,64,00,75,00,6c,00,61,00,72,00,20,00,42,00,49,\
00,4f,00,53,00,20,00,76,00,36,00,2e,00,30,00,30,00,50,00,47,00,00,00,00,00
если перевести в IS, то:
ValueType: multisz; ValueName: SystemBiosVersion; ValueData: GBT - 42302e31{break}Award Modular BIOS v6.00PG{break}
Из этого получается, что {break} - шесть нолей...
Хотя о вкусах конечно можно поспорить. »
я думаю нет смысла... :)
а в паскале я очень тяжело разбираюсь »
я тоже полгода назад, знал только название самого языка, а сейчас хоть узнал как процедуры называются... :)
ведь с sfx должно быть вроде попроще »
ничего подобного, там просто ключи распаковки, т.е. запуска архива будут разные, а всё остальное тоже самое...
ничего подобного, там просто ключи распаковки, т.е. запуска архива будут разные, а всё остальное тоже самое... »
Да это понятно, толкьо вот в чем дело я не собираюсь архив копировать сначала на диск С:\, потом запускать батник для распаковки и тд. Хочу чтобы он с dvd распаковывался. И хоть я и установил расширенную версию inno пытаюсь собрать инсталл он ругается на Application.ProcessMessages; типа unknown identifier Application
Хочу чтобы он с dvd распаковывался »
чуть позже выложу пример...
он ругается на Application.ProcessMessages »
Попробуйте эту (http://restools.hanzify.org/inno/InnoCompiler090506_English.zip) версию.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC