Ответе на вопрос плиз http://forum.ru-board.com/topic.cgi?forum=5&topic=30239&start=2780
» Inno Setup (создание инсталяционных пакетов)
Ктонить может помочь с ещё одной проблемкой? Нужен скрипт, который бы при выборе компонента Game\Full, автоматически ставил птичку у компонента Text
Raf_SE,
Так
Код:
[Setup]
AppName=MyAppName
AppVerName=AppVerName
DefaultDirName={pf}\The Elder Scrolls V - Skyrim
[Components]
Name: GameFull; Description: Game\Full;
Name: GameFull\Text; Description: Text;
[Types]
Name: Full; Description: Full; Flags: IsCustom;
Так
Код:
[Setup]
AppName=MyAppName
AppVerName=AppVerName
DefaultDirName={pf}\The Elder Scrolls V - Skyrim
[Components]
Name: GameFull; Description: Game\Full;
Name: GameFull\Text; Description: Text;
[Types]
Name: Full; Description: Full; Flags: IsCustom;
Raf_SE
[more]
Код: [_Components]
Name: "Game"; Description: "Files";
Name: "Game\Full"; Description: "All Files";
Name: "Text"; Description: "Text Files";
[_code]
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
if wizardform.ComponentsList.Checked[1] then
wizardform.ComponentsList.Checked[2]:=true;
end;
procedure InitializeWizard();
begin
wizardform.ComponentsList.OnClickCheck:=@ComponentsListOnClickCheck
end;
[more]
Код: [_Components]
Name: "Game"; Description: "Files";
Name: "Game\Full"; Description: "All Files";
Name: "Text"; Description: "Text Files";
[_code]
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
if wizardform.ComponentsList.Checked[1] then
wizardform.ComponentsList.Checked[2]:=true;
end;
procedure InitializeWizard();
begin
wizardform.ComponentsList.OnClickCheck:=@ComponentsListOnClickCheck
end;
Интересует вот что, лежит например на сервере одна версия, например 1.2, которая на диске например 0.9, можно ли как нибудь к инсталятору прикрутить кнопку "проверить версию", например по VersionInfoVersion или VersionInfoTextVersion, да и вообше возможно ли?
И ещё кое что, как установить дополнительную программу перед основной установкой/распаковкой программы, объясняется всё просто, в моём случае это будет драйвер, поясню, если я в секцию run пропишу запуск установки драйвера, то он естественно устанавливается после основной программы, если установка происходит так, то драйвер не устанавливается как положено, т.е потом всё равно приходится удалять, и ставить по новой, если же я ставлю сначала драйвер, а потом ПО, то установка происходит нормально.
И ещё кое что, как установить дополнительную программу перед основной установкой/распаковкой программы, объясняется всё просто, в моём случае это будет драйвер, поясню, если я в секцию run пропишу запуск установки драйвера, то он естественно устанавливается после основной программы, если установка происходит так, то драйвер не устанавливается как положено, т.е потом всё равно приходится удалять, и ставить по новой, если же я ставлю сначала драйвер, а потом ПО, то установка происходит нормально.
AtariUser
Это немного не то
troyan90
Огромное Спасибо!
Это немного не то
troyan90
Огромное Спасибо!
нашел функцию добавления ярлыков в taskband в win7 (панель с ярлыками возле кнопки пуск)
Код:
const
LOAD_LIBRARY_AS_DATAFILE = $2;
function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle;
external 'LoadLibraryExA@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Byte; nBufferMax: Integer): Integer;
external 'LoadStringA@user32.dll stdcall';
function PinToTaskbarWin7(Filename: String): Boolean;
var
hInst: THandle;
buf: array [0..255] of byte;
i: byte;
strVerb, s: String;
objShell, colverbs: Variant;
begin
if not FileExists(Filename) then Exit;
if (GetWindowsVersion shr 24 = 6) and ((GetWindowsVersion shr 16) and $FF = 1) then
begin
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
for i := 0 to LoadString(hInst, 5386, buf[0], 255)-1 do strVerb := strVerb + Chr(Buf[i]);
FreeDLL(hInst);
try
objShell := CreateOleObject('Shell.Application');
except
ShowExceptionMessage;
Exit;
end;
colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
for i := colVerbs.Count downto 1 do if colVerbs.Item[i].Name = strVerb then
begin
colVerbs.Item[i].DoIt;
Result := True;
end;
end;
end;
procedure InitializeWizard();
begin
if PinToTaskbarWin7('c:\windows\notepad.exe') then
MsgBox('ok', mbInformation, MB_OK)
else
MsgBox('no', mbInformation, MB_OK);
end;
Код:
const
LOAD_LIBRARY_AS_DATAFILE = $2;
function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle;
external 'LoadLibraryExA@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Byte; nBufferMax: Integer): Integer;
external 'LoadStringA@user32.dll stdcall';
function PinToTaskbarWin7(Filename: String): Boolean;
var
hInst: THandle;
buf: array [0..255] of byte;
i: byte;
strVerb, s: String;
objShell, colverbs: Variant;
begin
if not FileExists(Filename) then Exit;
if (GetWindowsVersion shr 24 = 6) and ((GetWindowsVersion shr 16) and $FF = 1) then
begin
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
for i := 0 to LoadString(hInst, 5386, buf[0], 255)-1 do strVerb := strVerb + Chr(Buf[i]);
FreeDLL(hInst);
try
objShell := CreateOleObject('Shell.Application');
except
ShowExceptionMessage;
Exit;
end;
colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
for i := colVerbs.Count downto 1 do if colVerbs.Item[i].Name = strVerb then
begin
colVerbs.Item[i].DoIt;
Result := True;
end;
end;
end;
procedure InitializeWizard();
begin
if PinToTaskbarWin7('c:\windows\notepad.exe') then
MsgBox('ok', mbInformation, MB_OK)
else
MsgBox('no', mbInformation, MB_OK);
end;
Ребята, научите плз делать репаки. Хотя бы просто опциональные установщики, в которые можно добавить галочки, типа: Установить ярлык на раб. стол, Установить ярлык на панель быстрого запуска, Установить DirectX, Установить Visual C++ и т.д. а то совсем новичёк в этом деле, почти полный 0
Цитата:
Ребята, научите плз делать репаки. Хотя бы просто опциональные установщики, в которые можно добавить галочки, типа: Установить ярлык на раб. стол, Установить ярлык на панель быстрого запуска, Установить DirectX, Установить Visual C++ и т.д. а то совсем новичёк в этом деле, почти полный 0начни с использования InnoIDE (скачивается при установке QuickStart Pack отсюда: http://www.jrsoftware.org/isdl.php ). Там графический интерфейс. добавляешь какие надо компоненты, что нужно заносить в реестр и т.д.
а потом оно само по нарастающей пойдет
[Обновление]The Elder Scrolls V: Skyrim
Версия скрипта: 1.1
Описание:
Обновление этого скрипта
Что нового:
- Улучшена страница установки;
- Улучшена финишная страница;
- Теперь кнопка "Отмена" на странице установки отображается нормально;
- Удален лишний неиспользуемый код из скрипта;
- И так, по мелочам;
Добавлена возможность использования скинов!
Скачать:
Ссылка
Версия скрипта: 1.1
Описание:
Обновление этого скрипта
Что нового:
- Улучшена страница установки;
- Улучшена финишная страница;
- Теперь кнопка "Отмена" на странице установки отображается нормально;
- Удален лишний неиспользуемый код из скрипта;
- И так, по мелочам;
Добавлена возможность использования скинов!
Скачать:
Ссылка
и ещё вопрос. при перемещении окна, процесс распаковки арк архивов останавливается. отпускаю окно - продолжается
как исправить?
Добавлено:
AtariUser
ваша функция MbOrTb работает не правильно...
вот немного подфиксил:
Код: Function MbOrTb(Byte: Extended): String;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' Мб' else
if Byte/1024 < 1024 then Result:= NumToStr(Byte/1024) + ' Гб' else
Result:= NumToStr(Byte/(1024*1024)) + ' Тб'
end;
как исправить?
Добавлено:
AtariUser
ваша функция MbOrTb работает не правильно...
вот немного подфиксил:
Код: Function MbOrTb(Byte: Extended): String;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' Мб' else
if Byte/1024 < 1024 then Result:= NumToStr(Byte/1024) + ' Гб' else
Result:= NumToStr(Byte/(1024*1024)) + ' Тб'
end;
TaTTDoGG
[more=PinToTasckbar.vbs]
Код:
Set objShell = CreateObject("Shell.Application")
set filesystem = CreateObject("scripting.Filesystemobject")
Set objFolder = objShell.Namespace(filesystem.GetParentFolderName(Wscript.Arguments(0)))
Set objFolderItem = objFolder.ParseName(filesystem.GetFileName(WScript.Arguments(0)))
Set colVerbs = objFolderItem.Verbs
For Each objVerb in colVerbs
If Replace(objVerb.name, "&", "") = "Pin to Taskbar" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Unpin from Taskbar" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Закрепить программу в панели задач" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Изъять программу из панели задач" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Закрепить на панели задач" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Открепить от панели задач" Then objVerb.DoIt
Next
[more=PinToTasckbar.vbs]
Код:
Set objShell = CreateObject("Shell.Application")
set filesystem = CreateObject("scripting.Filesystemobject")
Set objFolder = objShell.Namespace(filesystem.GetParentFolderName(Wscript.Arguments(0)))
Set objFolderItem = objFolder.ParseName(filesystem.GetFileName(WScript.Arguments(0)))
Set colVerbs = objFolderItem.Verbs
For Each objVerb in colVerbs
If Replace(objVerb.name, "&", "") = "Pin to Taskbar" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Unpin from Taskbar" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Закрепить программу в панели задач" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Изъять программу из панели задач" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Закрепить на панели задач" Then objVerb.DoIt
If Replace(objVerb.name, "&", "") = "Открепить от панели задач" Then objVerb.DoIt
Next
CKILL
спасибо. заработало когда сохранил в 1251 кодировке ))
а через Exec его как-то запустить можно?
Код: Exec(ExpandConstant('{tmp}')+'\PinToTaskbar.vbs', '"{app}\CA.exe"', ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
спасибо. заработало когда сохранил в 1251 кодировке ))
а через Exec его как-то запустить можно?
Код: Exec(ExpandConstant('{tmp}')+'\PinToTaskbar.vbs', '"{app}\CA.exe"', ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
Devils_Night по поводу проверки версии. в шапке в доп либах есть dll'ка скачивающая файл с серва. скачал txt с номером последней версии, ну а дальше сам знаешь
теперь по установке драйвера
тебе надо это делать не в секции Run
а в секции Code в следующем обработчике:
Код: procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpInstalling: begin
//тут устанавливаем драйвер
end;
end;
теперь по установке драйвера
тебе надо это делать не в секции Run
а в секции Code в следующем обработчике:
Код: procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpInstalling: begin
//тут устанавливаем драйвер
end;
end;
Цитата:
ваша функция MbOrTb работает не правильно...
TaTTDoGG,
Ну почему же? Результат один и тот же, разница лишь в лишнем коде. А так спасибо за замечание.
Как создать пустую папку не в app, не в pf и т.д., а там где захочет user? Т.е. как перед созданием папки вызвать диалог выбора и создания директории?
Спасибо.
Спасибо.
AtariUser
А вот у меня от размера 4043мб ваш код возвращает 3гб. А ведь результат примерно должен быть 3,9гб а это почти 4 )))
Добавлено:
кароч окугление в вашем коде лишнее
Добавлено:
fantoma61s
Так ведь путь можно изменить...или вы хотите чтобы при переходе на страницу выбора папки выскакивало дерево дисков??
А вот у меня от размера 4043мб ваш код возвращает 3гб. А ведь результат примерно должен быть 3,9гб а это почти 4 )))
Добавлено:
кароч окугление в вашем коде лишнее
Добавлено:
fantoma61s
Так ведь путь можно изменить...или вы хотите чтобы при переходе на страницу выбора папки выскакивало дерево дисков??
Цитата:
Так ведь путь можно изменить...или вы хотите чтобы при переходе на страницу выбора папки выскакивало дерево дисков??
Да, именно так. Еще я хочу, чтобы можно было не только выбрать, но и создать директорию.
fantoma61s
Дерево дисков можно ортисовать через компонент. А если укажите не существующую папку, то инсталятор сам ее создаст. Код дерева дисков добавлю через пару часов. Я ща просто с телефона пишу
upd: вот код
Код: var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;
procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'{#MyAppName}';
end;
procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'{#MyAppName}';
end;
procedure DisksTree();
begin
TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 88;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;
TFV:= TStartMenuFolderTreeView.Create(WizardForm);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:=417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;
end;
Дерево дисков можно ортисовать через компонент. А если укажите не существующую папку, то инсталятор сам ее создаст. Код дерева дисков добавлю через пару часов. Я ща просто с телефона пишу
upd: вот код
Код: var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;
procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'{#MyAppName}';
end;
procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'{#MyAppName}';
end;
procedure DisksTree();
begin
TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 88;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;
TFV:= TStartMenuFolderTreeView.Create(WizardForm);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:=417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;
end;
Большое Вам спасибо. Будем пробовать.
Здравствуйте!
Подскажите, пожалуйста, как вместо стандартного текста в ReadyLabel, написать свой текст.
Спасибо всем.
Подскажите, пожалуйста, как вместо стандартного текста в ReadyLabel, написать свой текст.
Спасибо всем.
Цитата:
Здравствуйте!
Подскажите, пожалуйста, как вместо стандартного текста в ReadyLabel, написать свой текст.
Спасибо всем.
Код:
[code]
procedure InitializeWizard;
begin
WizardForm.ReadyLabel.Caption:='новый текст';
end;
TaTTDoGG
Цитата:
Цитата:
Код: procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpInstalling: begin
//тут устанавливаем драйвер
end;
end;
Цитата:
function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;
Код: procedure CurPageChanged(CurPageID: Integer);
var
n:integer;
begin
case CurPageID of
wpInstalling: begin
Exec(ExpandConstant('{app}/driver.exe'), '',ExpandConstant('{app}'), sw_Hide, ewWaitUntilTerminated, n);
end;
end;
Цитата:
ps: я тоже не телепат чтобы знать какой вам там драйвер установить надо...Извиняюсь, я просто не понял что имелось ввиду, сейчас вроде начинаю понимать, если
Код: Exec(ExpandConstant('{app}/driver.exe'), '',ExpandConstant('{app}'), sw_Hide, ewWaitUntilTerminated, n);
Спасибо, уважаемый TaTTDoGG,
но и я так думала, что это поможет, но ничего этот код не изменил:
WizardForm.ReadyLabel.Caption:='новый текст';
Так и осталась надпись:
"Нажмите "Установить", чтобы продолжить"
Для проверки я изменила цвет:
WizardForm.ReadyLabel.Font.Color:=clred;
Цвет поменялся нормально...
Почему текст не меняется, непонятно...
Какие могут быть еще идеи?
Спасибо.
но и я так думала, что это поможет, но ничего этот код не изменил:
WizardForm.ReadyLabel.Caption:='новый текст';
Так и осталась надпись:
"Нажмите "Установить", чтобы продолжить"
Для проверки я изменила цвет:
WizardForm.ReadyLabel.Font.Color:=clred;
Цвет поменялся нормально...
Почему текст не меняется, непонятно...
Какие могут быть еще идеи?
Спасибо.
Devils_Night
cs делает тоже самое что вы делаете через реестр. тем более можно потестировать. если будет чот-то не так, то будем думать что делать дальше
cs делает тоже самое что вы делаете через реестр. тем более можно потестировать. если будет чот-то не так, то будем думать что делать дальше
Цитата:
А вот у меня от размера 4043мб ваш код возвращает 3гб. А ведь результат примерно должен быть 3,9гб а это почти 4
TaTTDoGG, Не может быть. Решил сравнить оба кода результат у меня получился одинаковый: 3.95 Гб.
AleSasha
Код: [Messages]
russian.ReadyLabel2a=новый текст
Код: [Messages]
russian.ReadyLabel2a=новый текст
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
Предыдущая тема: поиск
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.