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

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

Автор: Sandy Ann
Дата сообщения: 07.07.2008 22:02
ComradG
ЛС либо аська. Помощь очень нужна
Я по-моему сказал "Как для блондинки"
Автор: ComradG
Дата сообщения: 07.07.2008 22:09
В чем Ыманно?
Автор: Sandy Ann
Дата сообщения: 07.07.2008 22:14
В локализации проекта.
Давай все-таки тему не будем засорять и в приват перейдем?
Автор: ComradG
Дата сообщения: 07.07.2008 22:29
Может просто тему открыть в самом чате?
Автор: Genri
Дата сообщения: 07.07.2008 22:31
ComradG

Цитата:
в исходниках самой dll-ки SkinCrafter'а есть, если так мона выразиться, брешь, которая переписывается полностью под Inno
-- ошибаешься. Для работоспособности SkinCrafter под инно, нет необходимости вносить изменения в код длл-ки. Можно конечно и под себя переписать. Но не думаю, что в данном случае это оправдано.
Автор: Sandy Ann
Дата сообщения: 07.07.2008 22:40
Genri
А по-проще есть вариант? Вооще это реально, чтоб Innо подружился с юникодом?
Автор: ComradG
Дата сообщения: 07.07.2008 22:42
Для тех, кто в танке - после переписи dll-ка интегрируется с сам inno, в результате чего нет надобности писать какой-либо код в скрипте, кроме как в секции [Files] указать где лежит скин с параметром Flags: dontcopy. Скин будет инсталлица в X:\Document and Settings\(имя админа)\Application Data\InnoSetup\UninstSkin, а после деинсталляции проги и он поместится в папку X:\Windows\Temp Теперича догнал?

Добавлено:
С юникодом - реально. В прошлых топах, вроде об ентом писалось? или нет? если нет, то отпешусь чаво и как. Ты мне на профайл подробно пиСсы в чем трабл, а то действительно эфир засоряется
Автор: Genri
Дата сообщения: 07.07.2008 22:55
ComradG

Цитата:
Теперича догнал?
-- думаю нет. Мне не совсем понятно, откуда на компьютере пользователя возьмется эта длл, если кроме в секции [Files] будет только сам скин? А длл? И почему "Скин будет инсталлица" ?? Насколько я понимаю, скин нужен только для "разукрашивания" самого инсталлятора (т.е. только в процессе инсталляции/деинсталляции). И почему такие жесткие пути X:\Document and Settings\(имя админа)... и X:\Windows\Temp ?? А если таких папок нет? А если папки есть, но доступа туда нет?

Скорее всего, ты забыл указать, что еще что-то надо прописать. Приведи пример работающего скрипта плз.
Автор: ComradG
Дата сообщения: 07.07.2008 23:11

Короче, X:\ - в данном случае имя диска, как ты понял.
[Files]
Source: "C:\skins\MySkin.skf"; DestDir: "{app}"; Flags: dontcopy
В DestDir задается папка куда будет помещен скин будущего инсталлера, причем параметр {app} в нем считывается из dll, где, догоняй, уже прописаны пути,т.е. если доступа к админке нет, он установится в папку с прогой, но не в виде отдельного файла, а вшитый в uninst000.exe Нафиг это надо? А дело в том, что dll-то непростая, она умеет как в InstallShield умеет производить реинсталляцию, починку или полный снос проги. Короче, это своего рода мод для inno. А по поводу для чего все это ВАЩЕ? то ты верно заметил - для красоты и немного более функционала, а то СoronaSkin уже задрала. Ведь для ее компиляции препроцессор нужен, а тут тока inno

Добавлено:
Ладно,фиг с этой dll, а то будет как CoronaSkin
Автор: Sampron
Дата сообщения: 07.07.2008 23:26
ComradG
Раньше уже эксперементировали с SkinCrafter а точнее с NSIS_SkinCrafter_Plugin.dll глюков было туева хуча, как по мне лучше использовать ISSkin.dll так как эта библиотека изначально разрабатывалась для инно и глюков поменьше.
Автор: Genri
Дата сообщения: 07.07.2008 23:31
ComradG -- либо я действительно "в танке", либо мы говорим о разных вещах. Мы говорим о внесении изменений в "dll-ки SkinCrafter'а" или об изменении файлов инно? Какие пути могут быть считаны из длл, о которой инно ничего не знает??
Автор: ComradG
Дата сообщения: 07.07.2008 23:31
Я тоже юзаю ISSkin.dll, тем паче что основываясь Ыманно на нем я и дрюкал NSIS_SkinCrafter_Plugin.dll, правда юзаю я первый крайне редко, как виш накарябал се фичу покруче - препроцессором пользоваться влом, уж больно он глючный.

Добавлено:
О, буквы Кириллицы Ер и Ять! dll - поключаемый модуль к inno, плагин если хош. Подетрил?
Автор: blaster4
Дата сообщения: 07.07.2008 23:38
Кто нибудь подскажите пожалуйста !!!
Как можно с помощью инсталлятора "Inno Setup 5" записать в ini файл:

CDPATH: C:\Secrets Of Alamut

Имеется ввиду CDPATH: папка установки игры.
А то игруха лицензионная прописывает "CDPATH: D:\" и ищет там файлы для запуска! Делал так:

[INI]
Filename: "{app}\fl.INI"; Section: -; Key: "CDPATH:"; String:"{app}"

Получается так:
[-]
CDPATH:=C:\Secrets Of Alamut

Лишние знаки и вылетает ошибка!

Автор: ComradG
Дата сообщения: 07.07.2008 23:42
А посмотреть хелп влом?
Автор: Genri
Дата сообщения: 07.07.2008 23:49
ComradG

Цитата:
поключаемый модуль к inno
-- тогда напрасно прибедняешься. Это уже не "малость dll-ку подправил", а целый плагин. Отсюда и непонятки. Выражал бы свои мысли яснее, меньше офтопа было бы. Вопросов больше не имею.
Автор: blaster4
Дата сообщения: 07.07.2008 23:49
В заранее спасибо !!! сейчас поищу.

Добавлено:
Про взлом ничего не нашол !!!
Подкиньте пожалуйста ссылку где обсуждали изменение ini файлов
с помощью инсталлятора "Inno Setup"
Автор: Victor_Dobrov
Дата сообщения: 08.07.2008 03:42
ComradG
Цитата:
Corona Skin уже порядком поднадоела, неужели нече нового?
Victor_Dobrov - одна работа это еще не повод для того, чтобы делать из себя V.I.P. Разрабатывай ужо новое!

Информация для ComradG, вот ещё мои работы: SystemTest, InnoSetupUpgrade, CoronaSkin, SlideShow, ScreenSaverOnBackground, VideoOnBackground, BackgroundImage, PictureToBitmap (jpg, gif, png), RandomScreenSaver.

Чтобы делать что-то новое, надо сравнивать свою программу с теми, что сделали другие.
Создайте что-нибудь, улучшающее вид и возможности инсталлятора, будем обсуждать и сравнивать, например с Inno Setup Extensions by Martijn Laan или с Corona Skin, который является лучшим дополнением для InnoSetup.

ComradG
Цитата:
-СoronaSkin -уже -задрала. -Ведь -для -ее -компиляции -препроцессор -нужен... препроцессором -пользоваться -влом, -уж -больно -он -глючный.

Тяжёлый случай, для борьбы с несуществующими глюками препроцессора справка по Inno Setup Preprocessor вам поможет...
А такие объёмные довески к инсталлятору, как SkinCrafter или ISSkin.dll, меня не устраивают.
Автор: Chanka
Дата сообщения: 08.07.2008 05:40
Genri
Посмотри, пожалуйста, ПМ!!!
Автор: SergeyLS
Дата сообщения: 08.07.2008 08:54
Приветствую!
Есть прога: My Program
Есть: mp.ini в который однажды вкралась ошибочная запись.
В секции опции, есть ключ со значением:
[Options]
TeztMode=true
А надо, чтобы было:
[Options]
TestMode=true
Тоесть нужно в слове TeztMode заменить одну букву.
В Иноо Сетап есть секция ини, но в ней возможно менять значение ключа, но не сам ключь, а как поменять именно сам ключь, не меняя его значения?
Это реально?
Может есть какая-нибудь процедура для этого, которую можно вставить в секцию кода в Инно Сетапе?
Помогите найти пожалуйста, я перерыл уже весь форум, половину и-нета и руководства по Инно Сетапу, isxkb и руководство от Kindly.
Спасибо!
Всяческих вам, благ!
С уважением, Сергей.
Автор: nOobCrafter
Дата сообщения: 08.07.2008 09:40
Кто нибудь могет помоч?
Цитата:
Хелп народ. Вот [more=код][Setup]
AppName=BrowseFile
AppVerName=BrowseFile
DefaultDirName=BrowseFile
DisableStartupPrompt=true
Uninstallable=false
Compression=bzip
CreateAppDir=false
DisableProgramGroupPage=true

[Tasks]
Name: askini; Description: Choose a custom INI file; GroupDescription: Configuration:


[Code]

type

TOpenFileName = record
lStructSize: Longint;
hwndOwner: Longint;
hInstance: Longint;
lpstrFilter: PChar;
lpstrCustomFilter: PChar;
nMaxCustFilter: Longint;
nFilterIndex: Longint;
lpstrFile: PChar;
nMaxFile: Longint;
lpstrFileTitle: PChar;
nMaxFileTitle: Longint;
lpstrInitialDir: PChar;
lpstrTitle: PChar;
Flags: Longint;
nFileOffset: Word;
nFileExtension: Word;
lpstrDefExt: PChar;
lCustData: Longint;
lpfnHook: Longint;
lpTemplateName: PChar;
end;

function GetOpenFileName(var lpofn: TOpenFileName): Boolean; external
'GetOpenFileNameA@comdlg32.dll';

Const OFN_HIDEREADONLY = $4;


function NextButtonClick(CurPage: Integer): Boolean;
var
F: TOpenFileName;
S: String; z : char;
hwnd: Longint;
begin

// by default go to next page
Result := true;

z := Chr(0);
hwnd := StrToInt(ExpandConstant('{wizardhwnd}'));

// if curpage is wpSelectTasks
if CurPage = wpSelectTasks then
begin

if ShouldProcessEntry( '','askini') = srYes then
    begin

// set defailt file
S := 'config.ini';
// get enough space
SetLength(S, 512);
// set wizard HWND as owner
F.hwndOwner := hwnd;
// set structure size
F.lStructSize := 76;
// set S buffer for filename
F.lpstrFile := S;
F.nMaxFile := Length(S);
// set dialog title
F.lpstrTitle := 'Choose configuration file';
// set filters
F.lpstrFilter := 'INI files (*.ini)' + z + '*.ini' + z +
'All files (*.*)' + z + '*.*' + z + z ;
// set flags
F.Flags := OFN_HIDEREADONLY;
// set initial dir as system
F.lpstrInitialDir := ExpandConstant('{sys}');

if GetOpenFileName(F) then begin
     MsgBox( 'File choosed:'+ #13 + #13 + S, 0, 0);
     Result := true;
end
else
     Result := false;

end;

end;

end;[/more] из учебника, а вот мой [more=код][Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName=C:\innosetup\output\2
DisableStartupPrompt=true
Compression=bzip
Uninstallable=false

DisableProgramGroupPage=true
OutputBaseFilename=setup

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

[Tasks]
Name: askini; Description: Укажите расположение ключа; GroupDescription: Configuration:

[Code]

type

TOpenFileName = record
lStructSize: Longint;
hwndOwner: Longint;
hInstance: Longint;
lpstrFilter: PChar;
lpstrCustomFilter: PChar;
nMaxCustFilter: Longint;
nFilterIndex: Longint;
lpstrFile: PChar;
nMaxFile: Longint;
lpstrFileTitle: PChar;
nMaxFileTitle: Longint;
lpstrInitialDir: PChar;
lpstrTitle: PChar;
Flags: Longint;
nFileOffset: Word;
nFileExtension: Word;
lpstrDefExt: PChar;
lCustData: Longint;
lpfnHook: Longint;
lpTemplateName: PChar;
end;

function GetOpenFileName(var lpofn: TOpenFileName): Boolean; external
'GetOpenFileNameA@comdlg32.dll';

Const OFN_HIDEREADONLY = $4;


function NextButtonClick(CurPage: Integer): Boolean;
var
str: string;
F: TOpenFileName;
S: String; z : char;
hwnd: Longint;
begin

// by default go to next page
Result := true;

z := Chr(0);
hwnd := StrToInt(ExpandConstant('{wizardhwnd}'));

// if curpage is wpSelectTasks
if CurPage = wpSelectTasks then
begin

    
// set defailt file
S := 'key.reg';
// get enough space
SetLength(S, 512);
// set wizard HWND as owner
F.hwndOwner := hwnd;
// set structure size
F.lStructSize := 76;
// set S buffer for filename
F.lpstrFile := S;
F.nMaxFile := Length(S);
// set dialog title
F.lpstrTitle := 'Укажите расположение ключа';
// set filters
F.lpstrFilter := 'Ключ';
// set flags
F.Flags := OFN_HIDEREADONLY;
// set initial dir as system
F.lpstrInitialDir := ExpandConstant('{app}');

if GetOpenFileName(F) then else
     Result := false;

end;

end;[/more] и все бы хорошо но в данном скрипте есть ошибочка, даже при снятой галочке, при нажатии на кнупочку "Далее" всеравно выпрыгивает окошко выбора, как бы это пофиксить?... То есть что бы при снятой галочке просто продолжалась обычная установка и эта менюшка игнорилась. На строчку "if ShouldProcessEntry( '','askini') = srYes then" в оригинальном скрипте ругается. И как указать что бы оно выбранный ключ сразу же КОПИРОВАЛО в папку допустим C:\123, то есть что бы непредлагало куда мне его кинуть во время инстала, а сразу ложило в дефолтную папку...
Автор: ExpeditorR
Дата сообщения: 08.07.2008 10:44
blaster4
Попробуй вот так:

procedure DeinitializeSetup();
begin
try
SaveStringToFile(ExpandConstant('{app}')+'fl.ini', 'CDPATH: '+ExpandConstant('{app}'), True);
except
end;
end;

Я так понял тебе нужно именно это.

ComradG

Цитата:
А посмотреть хелп влом?

А помочь человеку влом? мы помоему тут не выясняем кто самый крутой программер который знает всё на свете, а помогаем друг-другу, а если знаешь как помочь и зажал, то и говорить тогда не стоит. Устроил тут меренье пипис..ами, типа корона туфта и тп., ну выложи свои труды с исходниками и обсудим их, раз они достойней, а пользоваться тем или иным тебя никто не заставляет, напиши что-нибудь поинтересней тогда и нефига конючить.


SergeyLS
Что-то я тоже не понял как удалить или заменить ключ, и поэтому написал следующий код:
procedure InitializeWizard();
var
i:integer;
st: TStringlist;
begin
st:=TStringlist;.create;
st.loadfromfile('c:\mp.ini');
for i:=0 to st.count-1 do
begin
if st.strings[i]='TeztMode=true' then
begin
st.Delete(i);
st.Insert(i,'TestMode=true');
end;
end;
st.savetofile('c:\mp.ini');
st.Free
end;

извращённо конечно, но работает Главное следи чтобы в искомой строчке (if st.strings[i]='TeztMode=true' then) регистр символов совпадал с теми, что в файле. И замени путь к файлу на свой.
Удачи!
Автор: Genri
Дата сообщения: 08.07.2008 13:32
nOobCrafter -- [more=Вариант 1][Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program
DisableStartupPrompt=true
Compression=bzip
Uninstallable=false

DisableProgramGroupPage=true

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

[Tasks]
Name: askini; Description: Укажите расположение ключа; GroupDescription: Configuration:

[_Code]
function NextButtonClick(CurPage: Integer): Boolean;
var
Filename: String;
begin
Result:= True;
if CurPage = wpSelectTasks then
begin
if IsTaskSelected('askini') then
begin
Filename := 'key.reg';
if GetOpenFileName('Select Key File', Filename, ExpandConstant('{src}'),
'Key Files (*.reg)|*.reg|All Files|*.*', 'reg') then
begin
ForceDirectories('C:\123\');
Result:= FileCopy(Filename, 'C:\123\'+ ExtractFileName(Filename), False)
end
else Result:= False;
end;
end;
end;
[/more], [more=Вариант 2][Setup]
AppName=My Program
AppVerName=My Program v.1.2
DirExistsWarning=no
DefaultDirName={pf}\My Program
DisableStartupPrompt=true
Compression=bzip
Uninstallable=false

DisableProgramGroupPage=true

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

[Tasks]
Name: askini; Description: Укажите расположение ключа; GroupDescription: Configuration:

[_Code]
var
Page: TInputFileWizardPage;

procedure InitializeWizard();
begin
Page := CreateInputFilePage(wpSelectTasks,
'Select Key File Location', 'Where is Key located?',
'Select where Key is located, then click Next.');

Page.Add('Select Key File', // caption
'Key Files (*.reg)|*.reg|All Files|*.*', // filters
'.reg'); // default extension

end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:= True;
if CurPage = Page.ID then
begin
if FileExists(Page.Values[0]) then
begin
ForceDirectories('C:\123\');
Result:= FileCopy(Page.Values[0], 'C:\123\'+ ExtractFileName(Page.Values[0]), False);
end
else Result:= False;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not IsTaskSelected('askini') then
Result:= True;
end;
[/more]
Хотя, видя неприличные слова в твоем коде, особого желания помогать не испытывал.


Добавлено:
ExpeditorR

Цитата:
А помочь человеку влом?
-- "Гражданин судья, а он не может!" ((С)Кавказская пленница)
Автор: Chanka
Дата сообщения: 08.07.2008 15:10
Genri

Спасибо за помощь и посмотри, пожалуйста, еще раз ПМ
Автор: Genri
Дата сообщения: 08.07.2008 15:45
SergeyLS

Цитата:
нужно в слове TeztMode заменить одну букву
-- не обязательно. Если речь идет об ини-файле, достаточно добавить правильный ключ (либо в секции [INI], либо через функцию SetIniBool в коде). В принципе этого достаточно (лишний ключ TeztMode на работоспособность не влияет). Но если хочешь совсем красиво, ключ TeztMode можно удалить функцией DeleteIniEntry.
Автор: nOobCrafter
Дата сообщения: 08.07.2008 16:36
2 Genri Сорри, просто как то незаметил((( когда делал, то что то неочень настрой был %)...
Уже все пофиксил.. Спс все заработало, тока вопрос...зачем писать [_Code] такое помниться и в мануале и тут пишут?....почему бы неписать сразу [Code]?
Автор: Genri
Дата сообщения: 08.07.2008 18:16
nOobCrafter

Цитата:
зачем писать [_Code]
--
Код: распознается форумным движком как код форума (см. http://i.ru-board.com/codes.html ). В принципе, можно и не обращать внимание. Но при редактировании такого поста, с большой долей вероятности, поедет форматирование.
ЗЫ. отредактировал.
[code]
function SerialNumberHDD(Controller, Drive: Integer): PChar;
external 'SerialNumberHDD@files:ISTask.dll stdcall delayload';
Автор: nOobCrafter
Дата сообщения: 08.07.2008 18:36
Яяясно, спс за просвещение...
Автор: Chanka
Дата сообщения: 08.07.2008 19:34
Genri

Пожалуйста, еще раз ПМ
Автор: ComradG
Дата сообщения: 08.07.2008 21:00
Victor Dobrov, утухните пожалуйста и не засоряйте эфир!
Кстати, никто не знает почему при использовании ISSkin.dll в купе с тем кодом, что отрубает значки закрыть, свернть и т.д. вызывает эксплойт. С этим мона бороться?
P.S.Кстати, эксплойт есть и в Corona Skin!!!
Автор: Genri
Дата сообщения: 08.07.2008 22:16
ComradG -- только в этой теме, в прошлых ветках, выкладывались штуки три-четыре разных метода "отрубания" системных кнопок. Если хочешь получить конкретный ответ, учись правильно задавать вопросы. А еще лучше, не используй слов, значений которых ты не знаешь. Пару раз можно и глаза закрыть, но читать бред в каждом посте - интерес пропадает.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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