Trancsend, В Inno Setup 5-х версий мастер установки и деинсталлятор - это один файл. (Setup.e32)
» Inno Setup (создание инсталяционных пакетов)
Victor_Dobrov
Спасибо. А что же тогда делать? Nsis?
Спасибо. А что же тогда делать? Nsis?
Люди, а кто-нибудь знает эсть ли скрипт, что б с помощью него, после компиляции записуишь диск и иго нельзя было скопировать.
Здравствуйте!
1) Если среди компонентов, выбираемых при установке, присутсвуют компоненты для Windows XP\Vista, исключительно для XP и исключительно для Vista, то как мне сделать, чтобы при запуске инсталлятора автоматически определялась версия ОС и те компоненты, которые не должны быть выбраны для неё (т.е. те, которые к ней не относятся), отключались и становились заблокированными?
2) Можно ли в InnoSetup сделать компоненты сворачиваемыми? Т.е. чтобы был значок "+", как в NSIS?
3) Существует плагин ISTask.dll, который с помощью [more=кода][Files]
Source: C:\Program Files\ISTask\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('XXX.exe', false) then
begin
if MsgBox('Программа XXX запущена, завершить её работу?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('XXX.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;[/more] после запуска инсталлятора определяет запущенный процесс и выгружает его. Но как мне сделать, чтобы после запуска деинсталлятора определялся запущенный процесс и тоже выгружался?
Помогите, кто чем может!
1) Если среди компонентов, выбираемых при установке, присутсвуют компоненты для Windows XP\Vista, исключительно для XP и исключительно для Vista, то как мне сделать, чтобы при запуске инсталлятора автоматически определялась версия ОС и те компоненты, которые не должны быть выбраны для неё (т.е. те, которые к ней не относятся), отключались и становились заблокированными?
2) Можно ли в InnoSetup сделать компоненты сворачиваемыми? Т.е. чтобы был значок "+", как в NSIS?
3) Существует плагин ISTask.dll, который с помощью [more=кода][Files]
Source: C:\Program Files\ISTask\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('XXX.exe', false) then
begin
if MsgBox('Программа XXX запущена, завершить её работу?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('XXX.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;[/more] после запуска инсталлятора определяет запущенный процесс и выгружает его. Но как мне сделать, чтобы после запуска деинсталлятора определялся запущенный процесс и тоже выгружался?
Помогите, кто чем может!
Kindly
Genri
Делаю инсталлятор для мода на Рим.Всё хорошо,но так и не справился с поставленной собою задачей(сделать всё это в одном скрипте).Для того чтобы запускался звук мода,необходимо сначала с помощью батника распаковать оригинальный звук Рима, и только затем закинуть с заменой свои папки(звук мода),ну и потом с помощью другово батника всё это запаковать!Дело в том,что всё это получается только если делать два скрипта,ну и соответственно получается две инсталяхи.
С праздничком! (у нас в Казахстане вчера Новый Год наступил... (Наурыз) )
Добавлено:
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
--------------------------------------------------------------------------------
[[more=то,что не работает...]Setup]
AppName=Mod
AppVerName=Mod
AppPublisher=Mod Team
DefaultDirName={reg:HKLM\SOFTWARE\The Creative Assembly\Rome - Total War,InstallPath|{pf}\Rome-TotalWar}
DisableDirPage=no
DefaultGroupName=Mod
OutputDir=D:\Mod
OutputBaseFilename=Mod_Setup
Compression=lzma/ultra
SolidCompression=yes
[more=то,что не работает...][/more]
[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: D:\Mod\data_m\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: unpackmusic.bat; DestDir: {app}; AfterInstall: Unpack(); Flags: ignoreversion
Source: D:\Mod\data_unpack\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Patch_for_Music_Mod.bat; DestDir: {app}; AfterInstall: Pack(); Flags: ignoreversion
Source: D:\Mod\data_patch\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: setup.ico; DestDir: {app}
[Icons]
Name: {group}\{cm:UninstallProgram,Mod}; Filename: {uninstallexe}
Name: {commondesktop}\Mod; Filename: {app}\RomeTW-BI.EXE; WorkingDir: {app}; IconFilename: {app}\setup.ico; Parameters: " -nm"
Name: {group}\Mod; Filename: {app}\rometw-bi.exe; WorkingDir: {app}; IconFilename: {app}\setup.ico; IconIndex: 0; Parameters: " -nm"
[Code]
procedure Unpack();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{app}\unpackmusic.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
DeleteFile(ExpandConstant('{app}\unpackmusic.bat'));
end;
procedure Pack();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{app}\Patch_for_Music_Mod.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
DeleteFile(ExpandConstant('{app}\Patch_for_Music_Mod.bat'));
DelTree(ExpandConstant('{app}')+'\data\sounds\data', True, True, True);
end;[/more]
Добавлено:
Видите,даже тэги нормально закрыть не могу
Genri
Делаю инсталлятор для мода на Рим.Всё хорошо,но так и не справился с поставленной собою задачей(сделать всё это в одном скрипте).Для того чтобы запускался звук мода,необходимо сначала с помощью батника распаковать оригинальный звук Рима, и только затем закинуть с заменой свои папки(звук мода),ну и потом с помощью другово батника всё это запаковать!Дело в том,что всё это получается только если делать два скрипта,ну и соответственно получается две инсталяхи.
С праздничком! (у нас в Казахстане вчера Новый Год наступил... (Наурыз) )
Добавлено:
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
--------------------------------------------------------------------------------
[[more=то,что не работает...]Setup]
AppName=Mod
AppVerName=Mod
AppPublisher=Mod Team
DefaultDirName={reg:HKLM\SOFTWARE\The Creative Assembly\Rome - Total War,InstallPath|{pf}\Rome-TotalWar}
DisableDirPage=no
DefaultGroupName=Mod
OutputDir=D:\Mod
OutputBaseFilename=Mod_Setup
Compression=lzma/ultra
SolidCompression=yes
[more=то,что не работает...][/more]
[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: D:\Mod\data_m\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly
Source: unpackmusic.bat; DestDir: {app}; AfterInstall: Unpack(); Flags: ignoreversion
Source: D:\Mod\data_unpack\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Patch_for_Music_Mod.bat; DestDir: {app}; AfterInstall: Pack(); Flags: ignoreversion
Source: D:\Mod\data_patch\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: setup.ico; DestDir: {app}
[Icons]
Name: {group}\{cm:UninstallProgram,Mod}; Filename: {uninstallexe}
Name: {commondesktop}\Mod; Filename: {app}\RomeTW-BI.EXE; WorkingDir: {app}; IconFilename: {app}\setup.ico; Parameters: " -nm"
Name: {group}\Mod; Filename: {app}\rometw-bi.exe; WorkingDir: {app}; IconFilename: {app}\setup.ico; IconIndex: 0; Parameters: " -nm"
[Code]
procedure Unpack();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{app}\unpackmusic.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
DeleteFile(ExpandConstant('{app}\unpackmusic.bat'));
end;
procedure Pack();
var
ResultCode: Integer;
begin
Exec(ExpandConstant('{app}\Patch_for_Music_Mod.bat'), '', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
DeleteFile(ExpandConstant('{app}\Patch_for_Music_Mod.bat'));
DelTree(ExpandConstant('{app}')+'\data\sounds\data', True, True, True);
end;[/more]
Добавлено:
Видите,даже тэги нормально закрыть не могу
elapse, спасибо! Но в третьем вопросе получается, что ISTask.dll извлекается в папку с программой, а потом деинсталлятор берёт его оттуда... А засунуть dll'шку в деинсталлятор невозможно?
Жду, когда кто-нибудь поможет ответить на [more=1)]1) Если среди компонентов, выбираемых при установке, присутсвуют компоненты для Windows XP\Vista, исключительно для XP и исключительно для Vista, то как мне сделать, чтобы при запуске инсталлятора автоматически определялась версия ОС и те компоненты, которые не должны быть выбраны для неё (т.е. те, которые к ней не относятся), отключались и становились заблокированными?[/more] вопрос! (см. через 2 поста выше)
Жду, когда кто-нибудь поможет ответить на [more=1)]1) Если среди компонентов, выбираемых при установке, присутсвуют компоненты для Windows XP\Vista, исключительно для XP и исключительно для Vista, то как мне сделать, чтобы при запуске инсталлятора автоматически определялась версия ОС и те компоненты, которые не должны быть выбраны для неё (т.е. те, которые к ней не относятся), отключались и становились заблокированными?[/more] вопрос! (см. через 2 поста выше)
Господа, помогите. По окончании установки необходимо создать ярлык. Причем разместить его на рабочем столе для всех пользователей, т.е. например для русской XP это папка "c:\Documents and Settings\All Users\Рабочий стол\"
2 ErshovSP2004
Помоему так:
Name: {commondesktop}\Need for Speed Most Wanted; Filename: {app}\speed.exe; Tasks: desktopicon
Помоему так:
Name: {commondesktop}\Need for Speed Most Wanted; Filename: {app}\speed.exe; Tasks: desktopicon
Ребята! Подскажите кто знает, как можно в реестре записать к примеру
{app}\Game или {app}\Game\app в ValueType: binary; заранее благодарю!!!
{app}\Game или {app}\Game\app в ValueType: binary; заранее благодарю!!!
Kutsenko
Спасибо, конечно нужно использовать {commondesktop}, в очередной раз поленился сам попробовать. Я просто грешным делом подумал, прочитав описание, что {userdesktop} & {commondesktop} одно и тоже лишь ссылка на папку пользователя
Спасибо, конечно нужно использовать {commondesktop}, в очередной раз поленился сам попробовать. Я просто грешным делом подумал, прочитав описание, что {userdesktop} & {commondesktop} одно и тоже лишь ссылка на папку пользователя
Vitalliano
Цитата:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
RegWriteBinaryValue(HKLM, 'Software\My Program', 'InstallDir', ExpandConstant('{app}') + '\Game');
end;
end;
Цитата:
в ValueType: binary;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
RegWriteBinaryValue(HKLM, 'Software\My Program', 'InstallDir', ExpandConstant('{app}') + '\Game');
end;
end;
Люди, а кто-нибудь знает эсть ли скрипт, что б с помощью него, после компиляции записуишь диск и иго нельзя было скопировать.
Цитата:
Люди, а кто-нибудь знает эсть ли скрипт, что б с помощью него, после компиляции записуишь диск и иго нельзя было скопировать.Ты что с ума сошёл? Конечно же нет... Такая проблема рещаеся иным способом... например CD-RX диски офигительная вещь... юзай.... http://cd-rx.ru/
serg_aka_lain
Огромная блягодарность!
Огромная блягодарность!
У кого нибудь есть наработки реализующие отображение лога консольного приложения запущенного из секции [RUN]. Например: Есть заготовка инсталяции (назовем её Setup.exe), которая предназначена для обновления справочников. Сами справочники валяются заархивированные под ногами у Setup.exe. Необходимо лог разархивирования, а так же лог обновления выводить ну например в TMemo на страничке с прогресбаром.
подскажите плиз. при установке нужно добавить в виндовую переменную окружения Path еще один путь. но я что-то не придумал ничего умного как удалять старое значение и прописывать новое. в моем случае это вполне проходит, но хотелось бы сделать по-правильному. буду очень благодарен любой подсказке
ErshovSP2004
Цитата:
function ExecConsoleAppX(CommandLine: PChar): PChar;
external 'ExecConsoleAppX@files:ISTask.dll stdcall';
Nrs -- http://www.jrsoftware.org/isfaq.php#env
Читаешь текущее значение Path (как угодно: из реестра, функцией GetEnv, используя консольную SET и т.п.); добавляешь нужный путь; сохраняешь. Какой из этих этапов у тебя вызывает проблемы ? Я так понял, что ты умеешь сохранять и удалять. Не получается прочитать или сложить две строки ?
Цитата:
отображение лога консольного приложения-- насколько помню, в ISTask.dll есть функция, возвращающая результат работы консольного приложения:
function ExecConsoleAppX(CommandLine: PChar): PChar;
external 'ExecConsoleAppX@files:ISTask.dll stdcall';
Nrs -- http://www.jrsoftware.org/isfaq.php#env
Читаешь текущее значение Path (как угодно: из реестра, функцией GetEnv, используя консольную SET и т.п.); добавляешь нужный путь; сохраняешь. Какой из этих этапов у тебя вызывает проблемы ? Я так понял, что ты умеешь сохранять и удалять. Не получается прочитать или сложить две строки ?
Подскажите - кто знает:
Дано: Win 64 и Win 32
и две ветки реестра:
[Registry]
Root: HKCR; SubKey: Installer\Products\Win 64
Root: HKCR; SubKey: Installer\Products\Win 32
Как можно (если можно) сделать установку по выбору с помощью
1) секции [Tasks]
2) секции [Components]
/////////////////////////////////////////////////////////////////////////////////////
С помощью [Components] здесь понятно.....только не могу избавится от вкладок:
полная установка...ит.д. еслиб можно было както убрать вкладки.
Вообщем выскажите свои мнения кто как думает...
Спасибо...
Дано: Win 64 и Win 32
и две ветки реестра:
[Registry]
Root: HKCR; SubKey: Installer\Products\Win 64
Root: HKCR; SubKey: Installer\Products\Win 32
Как можно (если можно) сделать установку по выбору с помощью
1) секции [Tasks]
2) секции [Components]
/////////////////////////////////////////////////////////////////////////////////////
С помощью [Components] здесь понятно.....только не могу избавится от вкладок:
полная установка...ит.д. еслиб можно было както убрать вкладки.
Вообщем выскажите свои мнения кто как думает...
Спасибо...
Genri
спасибо, проблемы были в том что я далек от программирования решение нашел в Knowledge Base.
спасибо, проблемы были в том что я далек от программирования решение нашел в Knowledge Base.
GRom V
В смысле в Types оставить 1 строчку с iscustom, если я правильно понял про вкладки.
[Types]
Name: "выборочная!"; Description: "Выбрано в ручную"; Flags: iscustom
В смысле в Types оставить 1 строчку с iscustom, если я правильно понял про вкладки.
[Types]
Name: "выборочная!"; Description: "Выбрано в ручную"; Flags: iscustom
Genri
Приветствую!
Я всё по тому же вопросу(56 страница),не подскажите?Парюсь-парюсь,никак в одном скрипте не получается...
Приветствую!
Я всё по тому же вопросу(56 страница),не подскажите?Парюсь-парюсь,никак в одном скрипте не получается...
elapse, спасибо помог, но появился ещё вопрос по этому уже [more=Коду]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
InfoBeforeFile=readme1.txt
[Files]
Source: readme2.txt; DestDir: {tmp}; Flags: dontcopy;
[Code]
procedure InitializeWizard();
var
String: String;
begin
ExtractTemporaryFile('readme2.txt');
LoadStringFromFile(ExpandConstant('{tmp}\readme2.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'New InfoBeforePage', 'Some interesting information', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
[/more], как сделать, что бы дополнительное окно "Информация" появлялось только при
выборе русского языка
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
InfoBeforeFile=readme1.txt
[Files]
Source: readme2.txt; DestDir: {tmp}; Flags: dontcopy;
[Code]
procedure InitializeWizard();
var
String: String;
begin
ExtractTemporaryFile('readme2.txt');
LoadStringFromFile(ExpandConstant('{tmp}\readme2.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'New InfoBeforePage', 'Some interesting information', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
[/more], как сделать, что бы дополнительное окно "Информация" появлялось только при
выборе русского языка
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Diawer, то есть страница wpInfoBefore? [more=Подробнее][no]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
InfoBeforeFile=readme1.txt
[Files]
Source: readme2.txt; DestDir: {tmp}; Flags: dontcopy;
[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Code]
procedure InitializeWizard();
var
String: String;
begin
ExtractTemporaryFile('readme2.txt');
LoadStringFromFile(ExpandConstant('{tmp}\readme2.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'New InfoBeforePage', 'Some interesting information', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = wpInfoBefore) and (ExpandConstant('{language}') <> 'russian') then Result := True;
end;
[/no][/more].
Или та страница, которую мы создаём в InitializeWizard? [more=Подробнее][no]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
InfoBeforeFile=readme1.txt
[Files]
Source: readme2.txt; DestDir: {tmp}; Flags: dontcopy;
[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Code]
procedure InitializeWizard();
var
String: String;
begin
if ExpandConstant('{language}') = 'russian' then
begin
ExtractTemporaryFile('readme2.txt');
LoadStringFromFile(ExpandConstant('{tmp}\readme2.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'New InfoBeforePage', 'Some interesting information', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
end;
[/no][/more]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
InfoBeforeFile=readme1.txt
[Files]
Source: readme2.txt; DestDir: {tmp}; Flags: dontcopy;
[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Code]
procedure InitializeWizard();
var
String: String;
begin
ExtractTemporaryFile('readme2.txt');
LoadStringFromFile(ExpandConstant('{tmp}\readme2.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'New InfoBeforePage', 'Some interesting information', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = wpInfoBefore) and (ExpandConstant('{language}') <> 'russian') then Result := True;
end;
[/no][/more].
Или та страница, которую мы создаём в InitializeWizard? [more=Подробнее][no]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
InfoBeforeFile=readme1.txt
[Files]
Source: readme2.txt; DestDir: {tmp}; Flags: dontcopy;
[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Code]
procedure InitializeWizard();
var
String: String;
begin
if ExpandConstant('{language}') = 'russian' then
begin
ExtractTemporaryFile('readme2.txt');
LoadStringFromFile(ExpandConstant('{tmp}\readme2.txt'), String);
CreateOutputMsgMemoPage(wpInfoBefore, 'New InfoBeforePage', 'Some interesting information', WizardForm.InfoBeforeClickLabel.Caption, String);
end;
end;
[/no][/more]
Dimbay
Цитата:
Цитата:
Выложи оба работающих отдельно. Проблем быть не должно (разве что кроме AfterInstall можно использовать еще и BeforeInstall)
Цитата:
необходимо сначала с помощью батника распаковать оригинальный звук Рима, и только затем закинуть с заменой свои папки(звук мода),ну и потом с помощью другово батника всё это запаковать-- я не слишком знаком с "модой Рима" и не совсем понял - в чем проблема ? Не получается совместить два скрипта, которые по отдельности все делают правильно ?
Цитата:
Source: D:\Mod\data_m\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs overwritereadonly-- это уже попытка совместить или только один из скриптов ?
Source: unpackmusic.bat; DestDir: {app}; AfterInstall: Unpack(); Flags: ignoreversion
Source: D:\Mod\data_unpack\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Patch_for_Music_Mod.bat; DestDir: {app}; AfterInstall: Pack(); Flags: ignoreversion
Source: D:\Mod\data_patch\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Выложи оба работающих отдельно. Проблем быть не должно (разве что кроме AfterInstall можно использовать еще и BeforeInstall)
Genri
Уже попытка совместить...
Я завтра ещё попробую...
Просто тяжело в 32 года программирование осваивать(вроде и слова все понятные "Ярослав","Богуслав"),как в Собачьем Сердце,так и здесь вроде всё понятно,что нужно сделать,а знаний маловато...
Уже попытка совместить...
Я завтра ещё попробую...
Просто тяжело в 32 года программирование осваивать(вроде и слова все понятные "Ярослав","Богуслав"),как в Собачьем Сердце,так и здесь вроде всё понятно,что нужно сделать,а знаний маловато...
Понравился [more=Код][Files]
Source: ISTask.dll; DestDir: {app}
[Код]
function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;
end;
function InitializeUninstall(): Boolean;
begin
If RunTaskA('DeskStickers.exe', false) then
KillTaskA('DeskStickers.exe');
Result := True;
Exit;
end;[/more], но есть вопросы.
Поскольку инсталлятор у меня многоязыковый я сделал, что бы закрытие запущенного
процесса происходило без вопроса, вопрос такой как сделать, что бы код выполнялся
после стандартного сообщения "Вы действительно хотите удалить XXX и все его компоненты?",
то есть если я запускаю деинсталлятор то приложение сначала выгружается и потом запускаеться
сам деинсталлятор, а надо что бы код запускался после выше указанного вопроса.
И подскажите пожалуйста, как сделать, что бы была возможность изменить надпись в том же
[more=Коде][Files]
Source: ISTask.dll; DestDir: {app}
[Код]
function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;
end;
function InitializeUninstall(): Boolean;
begin
If RunTaskA('DeskStickers.exe', false) then
begin
if MsgBox('Программа установки обнаружила, что программа запущена в данный момент. Закрыть программу?', mbInformation, mb_YesNo) = idYes then
begin
KillTaskA('DeskStickers.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;[/more] в шапке окна, надпись "Деинсталляция", на "Удалить DeskStickers".
Добавлено:
elapse, большое спасибо, опять помог, всё работает.
Source: ISTask.dll; DestDir: {app}
[Код]
function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;
end;
function InitializeUninstall(): Boolean;
begin
If RunTaskA('DeskStickers.exe', false) then
KillTaskA('DeskStickers.exe');
Result := True;
Exit;
end;[/more], но есть вопросы.
Поскольку инсталлятор у меня многоязыковый я сделал, что бы закрытие запущенного
процесса происходило без вопроса, вопрос такой как сделать, что бы код выполнялся
после стандартного сообщения "Вы действительно хотите удалить XXX и все его компоненты?",
то есть если я запускаю деинсталлятор то приложение сначала выгружается и потом запускаеться
сам деинсталлятор, а надо что бы код запускался после выше указанного вопроса.
И подскажите пожалуйста, как сделать, что бы была возможность изменить надпись в том же
[more=Коде][Files]
Source: ISTask.dll; DestDir: {app}
[Код]
function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;
end;
function InitializeUninstall(): Boolean;
begin
If RunTaskA('DeskStickers.exe', false) then
begin
if MsgBox('Программа установки обнаружила, что программа запущена в данный момент. Закрыть программу?', mbInformation, mb_YesNo) = idYes then
begin
KillTaskA('DeskStickers.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;[/more] в шапке окна, надпись "Деинсталляция", на "Удалить DeskStickers".
Добавлено:
elapse, большое спасибо, опять помог, всё работает.
Вышел Inno Script Generator с поддержкой 5.2.3, поправил шапку соответственно.
Diawer
Цитата:
Код:
procedure InitializeUninstallProgressForm();
begin
If RunTaskA('DeskStickers.exe', false) then
KillTaskA('DeskStickers.exe');
end;
Цитата:
я сделал, что бы закрытие запущенного-- вместо function InitializeUninstall(): Boolean; можно использовать procedure InitializeUninstallProgressForm();
процесса происходило без вопроса, вопрос такой как сделать, что бы код выполнялся
после стандартного сообщения "Вы действительно хотите удалить XXX и все его компоненты?"
Код:
procedure InitializeUninstallProgressForm();
begin
If RunTaskA('DeskStickers.exe', false) then
KillTaskA('DeskStickers.exe');
end;
Загрузка Jpeg через OleLoadPicture:
Пытался прикрутить в Inno загрузку jpeg-файлов напрямую, и вот что накопал:
К Jpg(Gif, Png...)-файлу или ресурсу, загруженному через OleLoadPicture (COM) можно обращаться как к HBITMAP.
Кто подскажет, возможно ли грузить jpeg-файл вместо BMP без сторонних библиотек (таких как isxbb.dll). Например так: через OleLoadPicture (или Gdiplus::Image) грузим jpg-файл и накладываем результат в виде HBITMAP на фоновое окно...
Вот описания и примеры из MSDN (8 web-страниц, 273 Кб), а [more=вот код]
STDAPI OleLoadPicture(
IStream * pStream,
Pointer to the stream that contains picture's data
LONG lSize,
Number of bytes read from the stream
BOOL fRunmode,
The opposite of the initial value of the picture's property
REFIID riid,
Reference to the identifier of the interface describing the type of interface pointer to return
VOID ppvObj );
Address of output variable that receives interface pointer requested in riid
function LoadJPGGIFBMPMemory(Ptr: HGlobal; Size: DWORD) : HBitmap;
var Stream: IStream;
hh: THandle;
begin
Result := 0l;
if CreateStreamOnHGlobal(ptr, true, Stream) <> S_OK then exit;
if OleLoadPicture(Stream, Size, false, IID_IPicture, PICTURE) <> S_OK then exit;
PICTURE.get_Handle(hh);
Result := HBitmap(hh);
end;
function OleLoadPicture(IStream: Variant; lSize: Integer; fRunMode: Boolean; riid: Variant; var ppvObj: Variant): LongInt; external 'OleLoadPicture@oleaut32.dll stdcall';
var ImageStream: Variant;
ImageStream:= CreateOleObject('LPSTREAM');
function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';
[/more] в сыром виде...
Пытался прикрутить в Inno загрузку jpeg-файлов напрямую, и вот что накопал:
К Jpg(Gif, Png...)-файлу или ресурсу, загруженному через OleLoadPicture (COM) можно обращаться как к HBITMAP.
Кто подскажет, возможно ли грузить jpeg-файл вместо BMP без сторонних библиотек (таких как isxbb.dll). Например так: через OleLoadPicture (или Gdiplus::Image) грузим jpg-файл и накладываем результат в виде HBITMAP на фоновое окно...
Вот описания и примеры из MSDN (8 web-страниц, 273 Кб), а [more=вот код]
STDAPI OleLoadPicture(
IStream * pStream,
Pointer to the stream that contains picture's data
LONG lSize,
Number of bytes read from the stream
BOOL fRunmode,
The opposite of the initial value of the picture's property
REFIID riid,
Reference to the identifier of the interface describing the type of interface pointer to return
VOID ppvObj );
Address of output variable that receives interface pointer requested in riid
function LoadJPGGIFBMPMemory(Ptr: HGlobal; Size: DWORD) : HBitmap;
var Stream: IStream;
hh: THandle;
begin
Result := 0l;
if CreateStreamOnHGlobal(ptr, true, Stream) <> S_OK then exit;
if OleLoadPicture(Stream, Size, false, IID_IPicture, PICTURE) <> S_OK then exit;
PICTURE.get_Handle(hh);
Result := HBitmap(hh);
end;
function OleLoadPicture(IStream: Variant; lSize: Integer; fRunMode: Boolean; riid: Variant; var ppvObj: Variant): LongInt; external 'OleLoadPicture@oleaut32.dll stdcall';
var ImageStream: Variant;
ImageStream:= CreateOleObject('LPSTREAM');
function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';
[/more] в сыром виде...
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
Предыдущая тема: Поиск в WinDjView
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.