Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: serg_aka_lain
Дата сообщения: 29.06.2008 21:26
Unc1e

Цитата:
создается раздел с таким именем в реестре


Это я к тому, что реестр тоже записывать через Code надо?
Автор: Unc1e
Дата сообщения: 29.06.2008 22:03
serg_aka_lain нет, библиотека сама создает все записи в реестре и ярлыки.
Автор: serg_aka_lain
Дата сообщения: 29.06.2008 22:28
Unc1e

Буду смотреть, спасибо.
Автор: SergDym
Дата сообщения: 29.06.2008 23:03
Быть может кто-нибудь встречался с подобной проблемой:

У пользователя на Windows Vista Enterprise SP1 при установке программы (инсталлятор сделан inno setup 5.2.3) выдается сообщение
Error: "ShellExecuteEx failed; code 267. The directory name is invalid".

Установил висту - на моей системе все работает корректно и под админом и под экаунтом гостя. Пользователь говорит, что если скачанная программа находится на столе или в папке скачанных программ, то инсталятор выдает эту ошибку. Но если он переносит программу в папку программы - инсталятор нормально работает.

Скрипт очень простой, всего один файл ложит в папку {pf}/appname
Возможно проблема не в inno setup вовсе...
Есть ли какие-то способы отловить эту проблему?
Автор: SotM
Дата сообщения: 30.06.2008 09:30
SergDym
А сами исходники скрипта есть?

Просто такое ощущение (судя по посту), что оригинала скрипта нет. Тогда в чём вопрос то?
А если и есть скрипт, то почему бы тогда не запостить его здесь?
Автор: SergDym
Дата сообщения: 30.06.2008 10:40
скорей всего проблема конкретной висты. Так как на 5 других машинах все отработало нормально.
Автор: nOobCrafter
Дата сообщения: 30.06.2008 13:00
Подскажите пожалуйста как в данный [more=код]procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usDone then
begin
DelTree(ExpandConstant('{app}\dbo'), True, False, False)
if DirExists(ExpandConstant('{app}\dbo')) then
begin
if MsgBox('Удалить конфигурацию объекта?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\dbo'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\dbo'))

DelTree(ExpandConstant('{app}\dbs'), True, False, False)
if DirExists(ExpandConstant('{app}\dbs')) then
begin
if MsgBox('Удалить конфигурацию извещений?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\dbs'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\dbs'))

DelTree(ExpandConstant('{app}\img'), True, False, False)
if DirExists(ExpandConstant('{app}\img')) then
begin
if MsgBox('Удалить фотографии пользователей?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\img'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\img'))
end
end;[/more] добавить функцию что бы при отказе от удаления папки, создавался ее бэкап (переименование с добавлением даты и времени бэкапа).
Ну или просто приведите пример кода, где бы папка бэкапилась перед началом установки, [more=тут][Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Files]
Source: Files\*; DestDir: {app}; BeforeInstall: CreateBackup()

[Code]
procedure CreateBackup();
begin
if FileExists(ExpandConstant(CurrentFileName)) then
FileCopy(ExpandConstant(CurrentFileName),
ExpandConstant('{app}\') +
GetDateTimeString('dd/mm/yyyy hh:nn:ss ', '-', '-') +
ExtractFileName(ExpandConstant(CurrentFileName)), True)
end;[/more] что то похожее, но мне надо что бы папка бэкапилась так что все ее содержимое осталось в оригинале, а на последнем примере переименовывается каждый файл отдельно(
Скрипт в руководстве делает несколько нето что надо и весьма непонятно %).
Автор: Chanka
Дата сообщения: 30.06.2008 17:58
Подскажите, пожалуйста, как задать совместимость для программы.
Подобно этому: Свойства - Совместимость - Запустить программу в режиме совместимости с: Нужно с Windows NT 4.0 (Service Pack 5)

И там же еще есть графа Параметры

Нужно чтобы стояла галочно напротив: Отключить визуальное оформление

Заранее спасибо!
Автор: Unc1e
Дата сообщения: 30.06.2008 18:53
Chanka,

Код: [Registry]
Root: HKCU; SubKey: "Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; ValueType: string; ValueName: "{app}\MyProg.exe"; ValueData: "NT4SP5 DISABLETHEMES"; Flags: uninsdeletevalue
Автор: Chanka
Дата сообщения: 30.06.2008 19:00
Unc1e

Спасибо!
Автор: Diawer
Дата сообщения: 30.06.2008 20:30
Я уже спрашивал но ответа не было, не думаю что для
знающего человека это трудная задача, может кто
сейчас поможет изменить иконку (большую, справа)
на странице с прогрессбаром когда идёт деинсталляция
она одна у меня осталась не помененная (не втему смотриться),
если нет такой возможности то может убрать её вообще можмо?
Автор: Unc1e
Дата сообщения: 30.06.2008 21:40
Diawer, мне такой [more=вариант][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: "MyProg.exe"; DestDir: "{app}";
Source: "Image_1.bmp"; DestDir: {app};

[_code]
procedure InitializeUninstallProgressForm();
begin
UninstallProgressForm.WizardSmallBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{app}\Image_1.bmp'))
end;
[/more] не очень нравится, но как иначе сделать я не знаю.
Автор: nOobCrafter
Дата сообщения: 01.07.2008 09:39
Может кто нибудь ответить на мой вопрос?... Надо всего лишь правильно впихнуть один код в другой с небольшой коррекцией, как мне кажеться %)....
Автор: Chanka
Дата сообщения: 01.07.2008 15:38
Кто может помочь с такой задачей? Надо чтобы при наведении курсора на кнопки (Далее, Назад, Отмена и.т.д.) проигрывался звук. А при нажатии на кнопки другой звук.
Может, кто знает, как такое замутить?
Автор: serg_aka_lain
Дата сообщения: 01.07.2008 19:25
nOobCrafter

Цитата:
Может кто нибудь ответить на мой вопрос?...


Цитата:
Ну или просто приведите пример кода, где бы папка бэкапилась перед началом установки
[more]

[_Code]


type
TSHFileOpStruct = record
Wnd: HWND;
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND;
end;

const
FO_RENAME = $0004;
FOF_FILESONLY = $0080;
FOF_ALLOWUNDO = $0040;
FOF_SILENT = $0004;
FOF_NOCONFIRMATION = $0010;

function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer;
external 'SHFileOperation@shell32.dll stdcall';

function RenameDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
_fromDir, _toDir: string;
begin
_fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
_toDir := RemoveBackslashUnlessRoot(toDir) + #0#0;
fos.wFunc := FO_RENAME;
fos.fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
FOF_SILENT or FOF_NOCONFIRMATION;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
Result := (0 = ShFileOperation(fos));
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
if DirExists(ExpandConstant('{app}\Path')) then
begin
RenameDir(ExpandConstant('{app}\Path\'), ExpandConstant('{app}\Path_bak' + ' -' + GetDateTimeString('dd/mm/yyyy hh:nn:ss ', '-', '-') + '\'));
end;
end;
end;

[/more]

з.ы. Папка бэкапится путём переименования с добавлением даты., под себя перепишешь сам.
Автор: jonikDk
Дата сообщения: 01.07.2008 21:23
у меня при инсталяции в конце должен вызываться батник. так вот можно как то вывести результаты работы батника в Memo поле ??

Запустить батник с перенаправлением вывода в файл и этот файл читать в inno ??
Кто подобное делал, отпишитесь пожалуйста о решении ??
Автор: MaxDELETE
Дата сообщения: 01.07.2008 21:49
Привет всем.
Такой вопрос - перечитал всю справку, но не нашел....:
1. Нужно сделать инсталлятор, который бы проверял определенную ветку в реестре...
Если он находит эту ветку, то установка продолжается, если нет, то посылает нах
2. В этой ветке будет задаваться например путь установленной программы.
Как сделать так, чтобы этот инсталлятор этот путь прочитывал и распаковывал по этому пути файлы?
3. Охото чтобы инсталлято вел лог всех запущенных установок и кем был он запущен (инсталлятор будет запускаться с сервера "обновлений", соответственно чтоб велся лог кто запускал...)

Подскажите примерно какими скриптами это реализовать или где в справке копнуть, потому что не нашел ничего подобного в справках, предложенных в шапке

Спасибо
Автор: Raf_SE
Дата сообщения: 01.07.2008 23:58
А ктонить знает как страницу выбора компонентов и страницу выбора папки установки поменять местами? Просто после выбора компонентов размер устанавливаемых файлов может возрасти в 2 раза, и если у юзера мало места на данном жестком, то ему придеться возвращаться на страницу назад выбрать другой, что есть неудобно.
Автор: Sampron
Дата сообщения: 02.07.2008 00:04
MaxDELETE
По первым двум вопросам примерно [more=так]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={code:MyPath}
DisableDirPage=yes

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[_Code]
var
s: String;

function InitializeSetup(): Boolean;
begin
Result:=True
if not RegQueryStringValue(HKLM, 'SOFTWARE\My Program', 'Path', s) then
begin
MsgBox('Пошёл нах!', mbInformation, MB_OK)
Result:=False
end
end;

function MyPath(Param: String): String;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\My Program', 'Path', s) then
Result:=s
end;
[/more]

Добавлено:
Raf_SE
Увы но никак!
Автор: KurtWagner
Дата сообщения: 02.07.2008 00:28
Слепился со скриптом InnoSetupUpgrade.iss и у меня в [Messages]
BeveledLabel=- появилась полоска внизу надписи когда нажимаю на надпись у меня выскакивает сылка где ее убрать??? заранее спасибо!!!
Автор: tgscott
Дата сообщения: 02.07.2008 02:16
Помогите.
Хочу сделать чтобы в скрипте было прописано и фоновый рисунок и звуковой файл
Но при создании скрипта, мне ругается на InitializeWizard. Дубликат.
Как я читал страници, нужно сделать чобы InitializeWizard 1 раз запускался и всё в нём проходило. Но у меня ошибка всё равно, хотя это ошибка из-за того что я не пойму как сделать.
подскажите как это сделать вот из этих 2-х скриптов :

[more]
[Setup]
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no

[Files]
Source: C:\isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.jpg; DestDir: {tmp}; Flags: dontcopy

[Code]
const
BACKGROUND=6;

function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer;
external 'isxbb_AddImage@files:isxbb.dll stdcall';

function isxbb_Init(hWnd: Integer): Integer;
external 'isxbb_Init@files:isxbb.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
end;


----------------------------------------------------------


[Files]
Source: "C:\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\01-OVERSEER-Doomsday.mp3"; DestDir: "{tmp}"; Flags: dontcopy

[Code]

сonst
BASS_SAMPLE_LOOP = 4;

type
HSTREAM = DWORD;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure InitializeWizard();
var
Name1: string;
    i: Integer;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('01-OVERSEER-Doomsday.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\01-OVERSEER-Doomsday.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
    begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

[/more]
Автор: Victor_Dobrov
Дата сообщения: 02.07.2008 03:15
KurtWagner, скрипт InnoSetupUpgrade.iss: как отключить ссылку в BeveledLabel?

Убери строки WizardForm.BeveledLabel.Enabled:= true и WizardForm.BeveledLabel.Font.Style:= [fsUnderline]

tgscott, Как сделать, чтобы в скрипте были прописаны и фоновый рисунок и звуковой файл?

Вот [more=пример]
[Setup]
AppName=Corona Skin
AppVerName=CheckFile
WindowVisible=yes
WindowResizable=no
WindowShowCaption=no
CreateAppDir=false

[Files]
Source: isxbb.dll; DestDir: {tmp}; Flags: dontcopy
Source: 1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: BASS.dll; DestDir: {tmp}; Flags: dontcopy
Source: Music.mp3; DestDir: {tmp}; DestName: Music.mp3; Flags: dontcopy

[Code]
const BACKGROUND=6; BASS_SAMPLE_LOOP = 4;
type HSTREAM = DWORD;

function isxbb_AddImage(Image: PChar; Flags: Cardinal): Integer; external 'isxbb_AddImage@files:isxbb.dll stdcall';
function isxbb_Init(hWnd: Integer): Integer; external 'isxbb_Init@files:isxbb.dll stdcall';
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start(): Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_Stop(): Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free(): Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';

procedure InitializeWizard();
var
Name1: string; i: Integer;
begin
ExtractTemporaryFile('1.jpg');
isxbb_AddImage(ExpandConstant('{tmp}')+'\1.jpg',BACKGROUND);
isxbb_Init(StrToInt(ExpandConstant('{hwnd}')));
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('Music.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\Music.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;

procedure DeInitializeSetup();
begin
    BASS_Stop();
    BASS_Free();
end;[/more] из твоих скриптов, ещё можно посмотреть руководство от Kindly, архив Game scripts.
Автор: Genri
Дата сообщения: 02.07.2008 11:34
jonikDk

Цитата:
можно как то вывести результаты работы батника в Memo поле ??
-- [more]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
InfoAfterFile=readme.txt

[Files]
Source: ISTask.dll; Flags: dontcopy

[_Code]
function ExecConsoleAppX(CommandLine: PChar): PChar;
external 'ExecConsoleAppX@files:ISTask.dll stdcall delayload';

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
WizardForm.InfoAfterMemo.Text:=
ExecConsoleAppX('cmd /C dir /-C /O:GN C:\');
end;
[/more]

MaxDELETE

Цитата:
чтобы инсталлято вел лог всех запущенных установок и кем был он запущен
-- [more]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[_Code]
var
str: string;

function InitializeSetup(): Boolean;
begin
str:= #13#10 + '=================' + #13#10 +
'Setup started : ' + GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':');
str:= str + #13#10 + 'Computer/User : ' +
GetComputerNameString + '/' + GetUserNameString;
SaveStringToFile('c:\filename.txt', str, True);
Result:= True;
end;

procedure DeinitializeSetup();
begin
str:= #13#10 + 'Setup finished: ' +
GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':');
SaveStringToFile('c:\filename.txt', str, True);
end;
[/more]
Автор: jonikDk
Дата сообщения: 02.07.2008 13:53
Genri
спасибки большое
Автор: nOobCrafter
Дата сообщения: 02.07.2008 16:19
2 serg_aka_lain спс, но я этот код и так в руководстве видел и писал что несколько неразобралси что там надо было менять, как показала 2хчасовая практика - ничего..((( но все же спасибо
Еще вопросы, как добавить диалог запроса файла из внешнего источника, с последующим его копированием в папку допустим C:\123\123.
И что нетак с [more=кодом][files]
Source: "C:\Program Files\Winamp\*"; DestDir: "{tmp}"; Flags: dontcopy

[code]
function NextButtonClick(CurPage: Integer): Boolean;
var
sz, res:Integer;
s, ResultStr:string;
begin
Result:=True;
If CurPage=6 then
begin
If (FileSearch('1.exe', ExpandConstant('C:\123'))='')
then else
begin
ExtractTemporaryFile('winamp.exe');
s:=ExpandConstant('{tmp}')+'\winamp.exe';
Exec(s, '', '', SW_SHOWNORMAL, ewNoWait, res); //Запуск приложения
Result:=True;
end;
end;
end; [/more], ибо когда происходит запуск программы, то выдается ошибка что одна из библиотек ненайдена хотя в папке она есть, пробовал еще на паре прог, некоторые работают некорректно. С чем это может быть связано?
Смысл задачи в том что бы при положительном результате проверки наличия файла, запускалась какая нить прога.

Автор: Genri
Дата сообщения: 02.07.2008 20:38
nOobCrafter

Цитата:
как добавить диалог запроса файла из внешнего источника, с последующим его копированием
-- [more]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[_Code]
procedure InitializeWizard();
var
srcFile, destFile: String;
begin
srcFile := '';
if GetOpenFileName('', srcFile, '',
'Text Documents (*.txt)|*.txt|All Files|*.*', 'txt') then
begin
if GetSaveFileName('', destFile, '',
'Text Documents (*.txt)|*.txt|All Files|*.*', 'txt') then
begin
FileCopy(srcFile, destFile, True);
end;
end;
end;
[/more]
Автор: Genri
Дата сообщения: 03.07.2008 14:15
Raf_SE, Sampron

Цитата:
как страницу выбора компонентов и страницу выбора папки установки поменять местами?
-- в принципе, конечно, нельзя. Но если очень надо, можно добавить в код примерно следующее:

Код:
procedure CurPageChanged(CurPageID: Integer);
begin
with WizardForm do
begin
if CurPageID = wpSelectDir then
SelectDirPage.Notebook.ActivePage:= SelectComponentsPage;
if CurPageID = wpSelectComponents then
SelectComponentsPage.Notebook.ActivePage:= SelectDirPage;
DiskSpaceLabel.Caption:= ComponentsDiskSpaceLabel.Caption;
end;
end;
Автор: Sampron
Дата сообщения: 03.07.2008 14:27
Genri
Отличный вариант! Спасибо!
Автор: Diawer
Дата сообщения: 03.07.2008 18:44
Unc1e, спасибо но это не вариант, может есть возможность убрать вообще иконку (большую, справа) на странице с прогрессбаром когда идёт деинсталляция
Автор: Genri
Дата сообщения: 03.07.2008 18:52
Diawer -- а чем конкретно не устраивает такой вариант ?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.