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

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

Автор: Genri
Дата сообщения: 15.12.2006 13:06
maxdddca123

Цитата:
Нет, мне надо, что бы при запуске инсталлятора закрывалась запущенная программа !
-- ты приведи пример , а то непонятно, кто кого почему закрывает
Автор: maxdddca123
Дата сообщения: 15.12.2006 13:20
Genri
Смари: у меня есть прога: му.ехе
Я её хочу обновить при помощи инсталлятора, т.е. у меня в инсталляторе содержится новая версия му.ехе. Если я её распакую, когда старая запущена, то само собой прога не обновится, типа невозможно переписать файл. Вот я и хочу, что бы инсталлятор при запуске проверял, открыта ли прога му.ехе , и если открыта, то выдавать предупреждение типа програамасейчас работает, необходимо закрыть её перед обновлением. Закрыть ? Да\нет.

Спасибо за личку, допомогай с ISTask.dll плизз
Автор: Genri
Дата сообщения: 15.12.2006 13:21
maxdddca123
пример у тебя в личке.

Добавлено:
хотя, сюда тоже выложу:

Код:
[[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
Source: ISTask.dll; DestDir: {tmp}; Flags: dontcopy

[Code]

function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

//**************************************************//
function InitializeSetup(): Boolean;
begin
If RunTask('calc.exe', false) then
begin
if MsgBox('Close My Program?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('calc.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;
Автор: maxdddca123
Дата сообщения: 15.12.2006 13:33
Genri
Допомогай плиз с ISTask.dll, что то сам файл не могу найти )
Genri
И ещё, уж сразу подскажи самый быстрый способ добавить около 70 папок с 4000 файлами в них... Уж очень неудобно это делать в инно
Автор: Genri
Дата сообщения: 15.12.2006 14:12
maxdddca123

Цитата:
подскажи самый быстрый способ добавить около 70 папок с 4000 файлами в них

Добавить куда? В проект?
У тебя удивительный талант задавать вопросы так, что не понятно что ты хочешь получить.

Если я правильно понял, то например так:
[Files]
Source: .\_Files\*; DestDir: "{app}"; Flags: recursesubdirs
Source: .\_Files2\*.mp3; DestDir: "{app}"; Flags: recursesubdirs
Автор: maxdddca123
Дата сообщения: 15.12.2006 14:46
Genri
Млин, извини, скоро научусь, просто пока со скрипом идёт. Ты вот привёл пример для 2-х папок, а у меня их 70. Представь сколько писать придётся. Но у меня все эти 70 папок содержаться в одной. Например дерево каталогов такое:

Папка1
|-Папка2
|-Папка3
|-Папка4
итд

И в каждой папке 1.2.3. кучи файлов и папок ещё, вот хочу сделать так, что бы прописать только добавление папки1, и что бы с ней вместе добавитлись все вложенные в неё папки и файлы с соблюдением дерева. Уровней воложенности много (до 10).

Всё разобрался, спасибо большое !
Автор: Genri
Дата сообщения: 15.12.2006 15:52
maxdddca123

Цитата:
Всё разобрался, спасибо большое
-- на всякий случай поясняю:
в обоих случаях копируются все вложенные в _Files папки. Только в одном случае все файлы в них, а в другом только *.mp3

И ты не ответил по поводу моего примера. Он у тебя работает или нет ?
Автор: maxdddca123
Дата сообщения: 15.12.2006 16:00
Дирректории всё нормально работает, про файлы всё понятно, благодарю. Кста я ещё поставли флаг createallsubdirs, думаю не помешает.

Цитата:
И ты не ответил по поводу моего примера. Он у тебя работает или нет ?
Нет, такая же ошибка, а может ещё какие нить библиотеки нужны дополнительные ?
Автор: AtotIK
Дата сообщения: 16.12.2006 09:27

Цитата:
А нет ли исходников для энтой замечательной проги?

Нету...Сам бы был рад
Автор: prostouser
Дата сообщения: 16.12.2006 14:31
здравствуйте , у меня такая проблема , делаю инсталяшку DC++ клиента для своей локалки , надо как то добавить в инсталяшку страницу с полем для вбивки псевдонима и потом этот псевдоним записать в нужном месте в xml файл настроек программы.
Это реально ?

п.с. видел что на Нсис-е раельно , неужели из за этого придётся перелезать на нсис ?
Автор: Kindly
Дата сообщения: 16.12.2006 19:12
maxdddca123
Есть такая тулза JahnKill - убивает процессы. Запускается с параметрами и киляет достаточно хорошо.
Автор: Denis_Kokyev
Дата сообщения: 17.12.2006 02:36
Расскажите пожалуйста, весь хелп и проч. материалы прочитал - но так и
не нашел, как можно переимновать каталог? Всяческие операции над
каталогами видел, а эту - не нашел. Интересует, как переименовать каталог перед непосредственной работой скрипта, в процедуре Procedure MyBeforeInstall и во время деинсталяции. Если можно - поподробнее пожалуйста.
Автор: GRom V
Дата сообщения: 17.12.2006 02:43
Извеняюсь Втупил!
Автор: ProFiler
Дата сообщения: 17.12.2006 17:43
Может кто знает, можно ли в Inno определить что инсталлятор запущен на Amd64? Надо мне для этой платформы драйвер другой устанавливать. В документации сходу ничего не нашел
Автор: GRom V
Дата сообщения: 18.12.2006 03:51
Вот тут писался скрипт по проверке IP.
Кто нить знает как сделать например по проверке серийника винчестера?
Смысл - привязка к конкретной машине.
Автор: maxdddca123
Дата сообщения: 18.12.2006 10:58
Помогите что делать? На этот скрипт выдаётся такая ошибка:

[11:51:10] *** Setup started
[11:51:10] Setup version: Inno Setup version 5.1.8
[11:51:10] Original Setup EXE: C:\Inno_out\Output\setup.exe
[11:51:10] Setup command line: /SL4 $408FA "C:\Inno_out\Output\setup.exe" 56866 52224 /DEBUGWND=$7090C
[11:51:10] Windows version: 5.01.2600 SP2 (NT platform: Yes)
[11:51:10] 64-bit Windows: No
[11:51:10] Processor architecture: x86
[11:51:10] User privileges: Administrative
[11:51:10] 64-bit install mode: No
[11:51:10] Created temporary directory: C:\WINDOWS\Temp\is-3NBNH.tmp
[11:51:37] InitializeSetup raised an exception (fatal).
[11:51:37] Exception message:
[11:51:37] Message box (OK):
    Runtime Error (at 3:61):
    
    Could not call proc.
[11:51:43] User chose OK.
[11:51:43] Deinitializing Setup.
[11:51:43] *** Setup exit code: 1
Автор: Genri
Дата сообщения: 18.12.2006 13:44
maxdddca123 -- возможно, требуются какие-нибудь борландовские библиотеки. К сожалению, нет возможности проверить на чистой машине. Если у кого такая возможность есть, может помогут.


Добавлено:
maxdddca123 -- у меня получилось получить такую же ошибку. Но только в случае изменения скрипта. Конкретно, вместо:

function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

... я прописал:

function KillTask(ExeFileName: string): Integer;
external 'KillTask@ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@ISTask.dll stdcall delayload';

Проверь еще раз.


Добавлено:
В указанном тобой скрипте только одна ошибка: лишняя скобка в [[Setup]. Больше ничего менять не надо. И все должно работать.

Автор: maxdddca123
Дата сообщения: 18.12.2006 15:46
Genri
Не, у меня прописано с files: , всё прально, но ошибка имеет место быть. Замучался уже искать решение... Давай ещё поразбираемся, пожааалуйста !

Добавлено:
А может дело в самой ISTask.dll ? Не мог бы ты скинуть твою на realdizzy@mail.ru
Автор: Genri
Дата сообщения: 18.12.2006 19:13
GRom V

Цитата:
как сделать например по проверке серийника винчестера

Если с делфи дружишь, можешь оформить в виде длл следующий код:

Код:
function SerialNumberDisk(disk: string): string;
var
VolumeName : array [0..MAX_PATH-1] of Char;
FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNo : DWord;
MaxComponentLength : DWord;
FileSystemFlags : DWord;

function GetReplaceCDNumber(num: String): String;
var
i, len: Integer;
begin
Result:= '';
len:= Length(num);
if len <> 8 then exit;
for i:= 1 to (len div 2) do begin
Dec(len);
Result:= Result + num[len ];
Result:= Result + num[len + 1];
Dec(len);
end;
end;

begin
GetVolumeInformation(PChar(disk), VolumeName, MAX_PATH, @VolumeSerialNo, MaxComponentLength,
FileSystemFlags, FileSystemName, MAX_PATH);
Result:= IntToHex(Integer(VolumeSerialNo), 8);
if Win32Platform <> VER_PLATFORM_WIN32_NT then
Result:= GetReplaceCDNumber(Result);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= SerialNumberDisk('c:\');
end;
Автор: GRom V
Дата сообщения: 19.12.2006 04:47
Genri

Спасибо огромное! но есть глючек! В ХР - работает без проМблем.
в 2000 пишет

Runtime Error (at 4:44)
Could not call proc

Не мог бы подправить?


Автор: Chanka
Дата сообщения: 19.12.2006 07:34
Genri,

Я отправил тебе в личку письмо. Посмотри, пожалуйста.
Автор: GRom V
Дата сообщения: 19.12.2006 08:28
Я так понял что у maxdddca123 таже беда! и дело похоже не ввинде, т.к у него ХР
гдето в DLL-ке косячокс
Автор: Genri
Дата сообщения: 19.12.2006 09:19
GRom V
maxdddca123
Проверьте плз, там где не работает, такую же ошибку выдает при вызове всех трех функций ? Т.е. если из длл использовать только одну из функций - будет такая же ошибка ? И так по каждой функции?
Автор: GRom V
Дата сообщения: 19.12.2006 09:25
пробую на ХР - идет, на 2000 - нихрена



Добавлено:
[Code]

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';



//**************************************************//
function InitializeSetup(): Boolean;
begin
If RunTask('calc.exe', false) then
begin
if MsgBox('Close My Program?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('calc.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;

В этом случае:
Runtime Error (at 3:61)
Could not call proc






а

[Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

function SerialNumberDisk(lpRootPathName: PChar): PChar;
external 'SerialNumberDisk@files:ISTask.dll stdcall delayload';


//**************************************************//
function InitializeSetup(): Boolean;
var
sn: String;
begin
sn:= SerialNumberDisk('c:\');
If GetMD5OfString(sn) <> '3fdb4346390cf75c83c8f0e51d5f0436' then
begin
MsgBox('Please Check Licence!', mbInformation, mb_OK);
Exit;
end;

If RunTask('calc.exe', false) then
begin
if MsgBox('Close My Program?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('calc.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;

в этом:
Runtime Error (at 4:44)
Could not call proc

Добавлено:
Насколько я могу судить из вышеперечисленного у maxdddca123 по первому скрипту (закрытие процесса):
Runtime Error (at 3:61):
Could not call proc
Автор: Kindly
Дата сообщения: 19.12.2006 10:13
Кстати, привязывать инсталлятор к железу или к файлу лицензии бесполезно, т.к. новая версия распаковщика способна извлечь из инсталлятора файлы с любым паролем.
Автор: Genri
Дата сообщения: 19.12.2006 10:39
GRom V
maxdddca123
Попробуйте эту
Пересобрал with packages




Добавлено:
Исходники есть. Пусть програмеры посмотрят. Я не спец.
Автор: Chanka
Дата сообщения: 19.12.2006 11:37
Genri,

Ну как проверил личку? Очень прошу помочь.
Автор: Genri
Дата сообщения: 19.12.2006 12:39
Kindly

Цитата:
новая версия распаковщика способна извлечь из инсталлятора файлы с любым паролем
-- но для этого надо знать пароль


Добавлено:
Попробуй извлеки что-нибудь из экзешника, скомпиленного из этого скрипта:

Код:
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Encryption=Yes
Password=7T34Ue(rrT

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

[Code]
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpPassword then Result:= True;
end;
Автор: GRom V
Дата сообщения: 19.12.2006 13:30
Genri

Цитата:
Попробуйте эту

Покажи исходник к последней - вроде Ок!
Автор: Genri
Дата сообщения: 19.12.2006 13:43
GRom V
Исходник тот же. Только в настройках проекта отключил опцию <Build with runtime packages>

Возможно дело в отсутствии какой-нибудь борландовской *.bpl на машине, где не идет.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: ICONS


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