Такой вопрос хочу добавить в скрипт такую проверку допустим если в системе присутствует опредленная программа то она не ставится а переходит сразу на установку другой а присутствие программы определяется из реестра!!!
» Inno Setup (создание инсталяционных пакетов)
skeptik_vdm
[no][Components]
Name: number1; Description: number1; Check: checking('Software\number1','key')
;Компонент не будет отображаться, если есть значение в реестре
[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion; Check: checking('Software\MyProg','Path')
;файл не будет копироваться, если есть значение в реестре
[Code]
function checking(subkey, param: string):boolean;
begin
If RegValueExists(HKLM, subkey, param)
Then Result:=false
Else Result:=true;
end;[/no]
[no][Components]
Name: number1; Description: number1; Check: checking('Software\number1','key')
;Компонент не будет отображаться, если есть значение в реестре
[Files]
Source: C:\Program Files\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion; Check: checking('Software\MyProg','Path')
;файл не будет копироваться, если есть значение в реестре
[Code]
function checking(subkey, param: string):boolean;
begin
If RegValueExists(HKLM, subkey, param)
Then Result:=false
Else Result:=true;
end;[/no]
Цитата:
Цитата:
Скажите как совместить этот код -
Подробнее...
с этим:
Подробнее...
Просто
Ещё кое что спрошу: как брать сраницу доп компонентов, ведь уже есть где выбрать - создать или не создавать ярлык на рабочий стол?
Сори за мой корявый русский....
Цитата:
В представленных кодах можно обойтись простым копи-паст.
Но вот с этим #include "SHFileOperation.iss" могут быть конфликты. Скорее всего совмещать нужно его с кодом бэкапа.
PS Нужен код этого файла, для совмещения.
В том-то и дело что если просто копипастом, то при компилировании он ошибку выдает...
[more=Вот];***************************************************************;
;****************** SHFileOperation.iss ************************;
;***************************************************************;
;* Include this file in project. Example:
;* #include "SHFileOperation.iss"
;***************************************************************;
;************************ 1 ************************************;
;* function CopyDir(const fromDir, toDir: string): Boolean;
;* Example 1 (without <fromDir> trailing backslash):
;* CopyDir('C:\TMP\MyApp', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files
;* Example 2 (with <fromDir> trailing backslash):
;* CopyDir('C:\TMP\MyApp\', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files
;***************************************************************;
;************************ 2 ************************************;
;* function MoveDir(const fromDir, toDir: string): Boolean;
;* Example 1 (without <fromDir> trailing backslash):
;* MoveDir('C:\TMP\MyApp', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\MyApp\..all <MyApp> subdirs and files
;* Example 2 (with <fromDir> trailing backslash):
;* MoveDir('C:\TMP\MyApp\', 'C:\TMP\Backup');
;* Result: C:\TMP\Backup\..all <MyApp> subdirs and files
;***************************************************************;
;************************ 3 ************************************;
;* function DelDir(dir: string; toRecycle: Boolean): Boolean;
;* If <toRecycle> is True, <dir> deleted in Recycle Bin.
;***************************************************************;
;************************ 4 ************************************;
;* function RenameDir(const fromDir, toDir: string): Boolean;
;***************************************************************;
;***************************************************************;
;***************************************************************;
[Code]
type
TSHFileOpStruct = record
Wnd: HWND;
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word; // FILEOP_FLAGS;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND; // Pointer;
lpszProgressTitle: PChar; { only used if FOF_SIMPLEPROGRESS }
end;
const
// use in wFunc
{ $EXTERNALSYM FO_MOVE }
FO_MOVE = $0001;
{ $EXTERNALSYM FO_COPY }
FO_COPY = $0002;
{ $EXTERNALSYM FO_DELETE }
FO_DELETE = $0003;
{ $EXTERNALSYM FO_RENAME }
FO_RENAME = $0004;
// use in fFlags
{ $EXTERNALSYM FOF_MULTIDESTFILES }
FOF_MULTIDESTFILES = $0001;
{ $EXTERNALSYM FOF_CONFIRMMOUSE }
FOF_CONFIRMMOUSE = $0002;
{ $EXTERNALSYM FOF_SILENT }
FOF_SILENT = $0004; { don't create progress/report }
{ $EXTERNALSYM FOF_RENAMEONCOLLISION }
FOF_RENAMEONCOLLISION = $0008;
{ $EXTERNALSYM FOF_NOCONFIRMATION }
FOF_NOCONFIRMATION = $0010; { Don't prompt the user. }
{ $EXTERNALSYM FOF_WANTMAPPINGHANDLE }
FOF_WANTMAPPINGHANDLE = $0020; { Fill in
SHFILEOPSTRUCT.hNameMappings
Must be freed using
SHFreeNameMappings }
{ $EXTERNALSYM FOF_ALLOWUNDO }
FOF_ALLOWUNDO = $0040;
{ $EXTERNALSYM FOF_FILESONLY }
FOF_FILESONLY = $0080; { on *.*, do only files }
{ $EXTERNALSYM FOF_SIMPLEPROGRESS }
FOF_SIMPLEPROGRESS = $0100; { means don't show names of files }
{ $EXTERNALSYM FOF_NOCONFIRMMKDIR }
FOF_NOCONFIRMMKDIR = $0200; { don't confirm making any
needed dirs }
{ $EXTERNALSYM FOF_NOERRORUI }
FOF_NOERRORUI = $0400; { don't put up error UI }
function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer;
external 'SHFileOperation@shell32.dll stdcall';
{****************************************************************}
{****************************************************************}
{****************************************************************}
function BackupDir(const fromDir, toDir: string; IsMove: Boolean): Boolean;
var
fos: TSHFileOpStruct;
_fromDir, _toDir: string;
SR: TFindRec;
res: Boolean;
begin
ForceDirectories(toDir);
if IsMove then
fos.wFunc := FO_MOVE else
fos.wFunc := FO_COPY;
fos.fFlags := FOF_FILESONLY or FOF_SILENT or
FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
_fromDir:= AddBackslash(fromDir);
_toDir := AddBackslash(toDir);
if (Length(fromDir) = Length(_fromDir)) then
begin
res:= FindFirst(_fromDir + '*', SR);
try
while res do
begin
if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
begin
if SR.Attributes = FILE_ATTRIBUTE_DIRECTORY then
begin
_fromDir:= _fromDir + SR.Name + #0#0;
_toDir := _toDir + #0#0;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
end else
begin
_fromDir:= _fromDir + SR.Name + #0#0;
_toDir := _toDir + SR.Name + #0#0;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
end;
Result := (0 = ShFileOperation(fos));
_fromDir:= ExtractFilePath(_fromDir);
_toDir:= ExtractFilePath(_toDir);
end;
res := FindNext(SR);
end;
finally
FindClose(SR);
end;
end else
begin
_fromDir:= RemoveBackslashUnlessRoot(_fromDir) + #0#0;
_toDir := RemoveBackslashUnlessRoot(_toDir) + #0#0;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
Result := (0 = ShFileOperation(fos));
end;
end;
{****************************************************************}
function MoveDir(const fromDir, toDir: string): Boolean;
begin
Result := BackupDir(fromDir, toDir, True);
end;
{****************************************************************}
function CopyDir(const fromDir, toDir: string): Boolean;
begin
Result := BackupDir(fromDir, toDir, False);
end;
{****************************************************************}
function DelDir(dir: string; toRecycle: Boolean): Boolean;
var
fos: TSHFileOpStruct;
_dir: string;
begin
_dir:= RemoveBackslashUnlessRoot(dir) + #0#0;
fos.wFunc := FO_DELETE;
fos.fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
if toRecycle then
fos.fFlags := fos.fFlags or FOF_ALLOWUNDO;
fos.pFrom := PChar(_dir);
Result := (0 = ShFileOperation(fos));
end;
{****************************************************************}
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;
{****************************************************************}
{****************************************************************}
{****************************************************************}
[/more] код файла что инклюдится.
Может все же кто нибулдьд помоч с этим вопросом?
Цитата:
надо пару файлов из одной папки и пару из другой.. Уфф..надеюсь обьяснил подробней некуда %)).
Цитата:
День добрый, возникла надобность дописать режим обновления для инсталяшки, сами галочки сделать и т.д. проблем нету, вопрос вот в чем, как можно указать что устанавливать нужно только определенные файлы из всей кучи, а больше ничего не делать?
Допустим у меня есть набор файлов и папок, при чистой установке копирются все папки и файлы, а при обновлении только несколько файлов, все это для того чтобы уменьшить размер дистрибутива, а не пихать по разным папкам (а так же не создавать компонент которому присваивать отдельно эти пару файлов %)), а в установке при выборе обновления просто копировать нужные файлы из диструбтива.
примерно у меня папка cодержимое папки при чистой установке образно:
___________________________________________________
Установочная папка > data\audio\setting\redme.txt\proga.exe
при обновлении:
___________________________________________________
Установочная папка > proga.exe\readme.txt
Вот живой пример организации:
Код: Source: C:\777\guard\*; DestDir: {app}\777\Guard; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a
Source: C:\777\access\*; DestDir: {app}\777\Access; Flags: ignoreversion recursesubdirs createallsubdirs; Components: b
надо пару файлов из одной папки и пару из другой.. Уфф..надеюсь обьяснил подробней некуда %)).
msatmb
Наверное, где то так. Инклуд не трогал.
[more]#include "SHFileOperation.iss"
[Setup]
AppName=Brettzies Weapon Pack
AppVerName=Brettzies Weapon Pack v4.0
DefaultDirName={code:GetInstallDir}
DefaultGroupName={code:GetInstallGroup}
DisableProgramGroupPage=True
DisableReadyPage=True
DirExistsWarning=false
EnableDirDoesntExistWarning=no
CreateUninstallRegKey=no
Uninstallable=no
DisableFinishedPage=True
SolidCompression=true
Compression=lzma/ultra64
[Icons]
Name: "{group}\Руководство по Brettzies Weapon Pack"; Filename: "{app}\readme_bp_weaponspack_v4.0_graw.pdf"; WorkingDir: "{app}"
[Files]
Source: "D:\MyInno_Script\Advanced Warfighter\Brettzies_wpnPack_GRAW\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs; BeforeInstall: CreateBackup;
[Tasks]
Name: src; Description: "Backup"
[Code]
function MoveFile(const srcFile, destFile: PChar): Integer;
external 'MoveFileA@kernel32.dll stdcall';
procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
if IsTaskSelected('src') then
begin
basePath := ExpandConstant('{app}');
srcFile := ExpandConstant(CurrentFileName);
shortPath := srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile := ExpandConstant('{app}\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Backup\'), ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Backup\'));
end;
end;
function GetInstallGroup(Group: string): string;
begin
Group := '';
RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghost Recon 3 - Advanced Warfighter_is1\','Inno Setup: Icon Group', Group);
Result := Group;
end;
function GetInstallDir(Dir: string): string;
begin
Dir := '';
RegQueryStringValue(HKLM, 'Software\Ubisoft\Ghost Recon Advanced Warfighter','InstalledPath', Dir);
Result := Dir;
end;
function InitializeSetup(): Boolean;
var
S: String;
begin
Result := True;
S := ExpandConstant('{code:GetInstallDir}');
if S = '' then
begin
SuppressibleMsgBox('Игра Ghost Recon Advanced Warfighter не найдена!', mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;
{
условия необходимые для определения обновлялась игра или нет,
размер или наличие новых файлов, запись в реестре,
наличие деинсталлятора патча,
в данном случае проверяется наличие деинсталлятора
--> проверка ... если условие выполняется Result := False
}
if MsgBox('Игра Ghost Recon Advanced Warfighter найдена, желаете установить мод Brettzies Weapon Pack v4.0?', mbConfirmation, MB_YESNO) = IDNO then
Result := False;
Exit;
end;
procedure CurPageChanged(CurPageID: Integer);
var
S: String;
begin
if CurPageID = wpWelcome then
S := ExpandConstant('{code:GetInstallDir}');
if S <> '' then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
if CurPageID = wpSelectDir then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Модификация ' + '{#SetupSetting("AppVerName")}' + ' установлена!', mbInformation, MB_OK);
end;[/more]
Наверное, где то так. Инклуд не трогал.
[more]#include "SHFileOperation.iss"
[Setup]
AppName=Brettzies Weapon Pack
AppVerName=Brettzies Weapon Pack v4.0
DefaultDirName={code:GetInstallDir}
DefaultGroupName={code:GetInstallGroup}
DisableProgramGroupPage=True
DisableReadyPage=True
DirExistsWarning=false
EnableDirDoesntExistWarning=no
CreateUninstallRegKey=no
Uninstallable=no
DisableFinishedPage=True
SolidCompression=true
Compression=lzma/ultra64
[Icons]
Name: "{group}\Руководство по Brettzies Weapon Pack"; Filename: "{app}\readme_bp_weaponspack_v4.0_graw.pdf"; WorkingDir: "{app}"
[Files]
Source: "D:\MyInno_Script\Advanced Warfighter\Brettzies_wpnPack_GRAW\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs; BeforeInstall: CreateBackup;
[Tasks]
Name: src; Description: "Backup"
[Code]
function MoveFile(const srcFile, destFile: PChar): Integer;
external 'MoveFileA@kernel32.dll stdcall';
procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
if IsTaskSelected('src') then
begin
basePath := ExpandConstant('{app}');
srcFile := ExpandConstant(CurrentFileName);
shortPath := srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile := ExpandConstant('{app}\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Backup\'), ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Backup\'));
end;
end;
function GetInstallGroup(Group: string): string;
begin
Group := '';
RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Ghost Recon 3 - Advanced Warfighter_is1\','Inno Setup: Icon Group', Group);
Result := Group;
end;
function GetInstallDir(Dir: string): string;
begin
Dir := '';
RegQueryStringValue(HKLM, 'Software\Ubisoft\Ghost Recon Advanced Warfighter','InstalledPath', Dir);
Result := Dir;
end;
function InitializeSetup(): Boolean;
var
S: String;
begin
Result := True;
S := ExpandConstant('{code:GetInstallDir}');
if S = '' then
begin
SuppressibleMsgBox('Игра Ghost Recon Advanced Warfighter не найдена!', mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;
{
условия необходимые для определения обновлялась игра или нет,
размер или наличие новых файлов, запись в реестре,
наличие деинсталлятора патча,
в данном случае проверяется наличие деинсталлятора
--> проверка ... если условие выполняется Result := False
}
if MsgBox('Игра Ghost Recon Advanced Warfighter найдена, желаете установить мод Brettzies Weapon Pack v4.0?', mbConfirmation, MB_YESNO) = IDNO then
Result := False;
Exit;
end;
procedure CurPageChanged(CurPageID: Integer);
var
S: String;
begin
if CurPageID = wpWelcome then
S := ExpandConstant('{code:GetInstallDir}');
if S <> '' then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
if CurPageID = wpSelectDir then
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Модификация ' + '{#SetupSetting("AppVerName")}' + ' установлена!', mbInformation, MB_OK);
end;[/more]
Как сделать чтобы при установке инсталятьра, можно было extracting распаковать автоматически и в папку установки( сам extracting находился бы на диске)?
Ответьте пожалуйста
Ответьте пожалуйста
Цитата:
Цитата:
Цитата:
Скажите как совместить этот код -
Подробнее...
с этим:
Подробнее...
Просто
Ещё кое что спрошу: как брать сраницу доп компонентов, ведь уже есть где выбрать - создать или не создавать ярлык на рабочий стол?
Сори за мой корявый русский....
Всё, сам разобрался....
Добавлено:
Слушайте, а как сделать так чтобы вместо кнопки Далее была надпись "установить" и именно на этой сранице http://pic.rapidshare.ru/955765
Qarma
Цитата:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
WizardForm.NextButton.Caption:='Установить';
end;
end;
Цитата:
Слушайте, а как сделать так чтобы вместо кнопки Далее была надпись "установить" и именно на этой сранице http://pic.rapidshare.ru/955765
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
WizardForm.NextButton.Caption:='Установить';
end;
end;
А как это:
Цитата:
скрестить с этим:
procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpFinished then KillTimer(0, TimerID);
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False
end;
end;
Цитата:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then begin
WizardForm.NextButton.Caption:='Установить';
end;
end;
скрестить с этим:
procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpFinished then KillTimer(0, TimerID);
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False
end;
end;
Qarma
[no]procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpFinished then KillTimer(0, TimerID);
if CurPageID = wpSelectDir
then begin
WizardForm.NextButton.Caption:='Установить';
if FreeMB < NeedSize
then WizardForm.NextButton.Enabled:=False;
end;
end; [/no]
[no]procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpFinished then KillTimer(0, TimerID);
if CurPageID = wpSelectDir
then begin
WizardForm.NextButton.Caption:='Установить';
if FreeMB < NeedSize
then WizardForm.NextButton.Enabled:=False;
end;
end; [/no]
Спасибо всем!
Привет всем как зделать проверку системы как в игре сталкер
Добавлено:
а как сменить иконку деинсталятора unins000.exe
Добавлено:
а как сменить иконку деинсталятора unins000.exe
clemenco - спасибо, все работает!
кто нибудь помогите как зделать проверку системы как в игре сталкер и сменить иконку деинсталятора unins000.exe
Yoldosh
Цитата:
По 1-му вопросу в шапке есть "Коллекция скриптов" там есть скрипт "Ultimate Test" это как раз то самое что нужно
По 2-му вопросу добавь это
IconFilename:Icon.ico(тут указываешь иконку)
Цитата:
кто нибудь помогите как зделать проверку системы как в игре сталкер и сменить иконку деинсталятора unins000.exe
По 1-му вопросу в шапке есть "Коллекция скриптов" там есть скрипт "Ultimate Test" это как раз то самое что нужно
По 2-му вопросу добавь это
IconFilename:Icon.ico(тут указываешь иконку)
Использую Corona Skin и вот заметил за последнюю неделю несколько глюков связанных с антивирусами.
1) ImgGdiPlus.dll распознается вирусом nod32 (во всяком случае в 3 версии), но установить можно
2) InnoCallBack.dll распознается вирусом avast и установка не возможна.
1) ImgGdiPlus.dll распознается вирусом nod32 (во всяком случае в 3 версии), но установить можно
2) InnoCallBack.dll распознается вирусом avast и установка не возможна.
skeptik_vdm Большое спасибо
Помогите требуется скрипт запуска любого приложения (.exe), до запуска основного установщика.
(то есть - сначала запустить указанное приложение, после - запустит сам установщик)
Подскажите возможно ли это!
(то есть - сначала запустить указанное приложение, после - запустит сам установщик)
Подскажите возможно ли это!
mikutu
Не может быть такого у меня НОД32 версия 3 стоит и молчит ни чего не говорит и Каспер не жалуется!!!
Не может быть такого у меня НОД32 версия 3 стоит и молчит ни чего не говорит и Каспер не жалуется!!!
Цитата:
Как сделать чтобы при установке инсталятьра, можно было extracting распаковать автоматически и в папку установки( сам extracting находился бы на диске)?
Ответьте пожалуйста
Помогите мне кто-нибудь
mikutu
А зачем использовать "антивирус", который даёт ложные срабатывания на безвредных (хоть и сжатых при помощи UPack) файлах?
Впрочем, попробуй заменить InnoCallback.dll на эту незапакованную версию.
С файлом ImgGdiPlus.dll сложнее - или отключи Медиаплеер и фоновую картинку или обращайся к автору программы SBRunScr.
Всем новичкам
Напомню, что в форуме работает поиск и есть версия для печати.
Ещё можно ознакомиться с заголовком (шапкой), чтобы не захламлять тему вопросами, на 9 из 10-ти которых ответы уже были.
А зачем использовать "антивирус", который даёт ложные срабатывания на безвредных (хоть и сжатых при помощи UPack) файлах?
Впрочем, попробуй заменить InnoCallback.dll на эту незапакованную версию.
С файлом ImgGdiPlus.dll сложнее - или отключи Медиаплеер и фоновую картинку или обращайся к автору программы SBRunScr.
Всем новичкам
Напомню, что в форуме работает поиск и есть версия для печати.
Ещё можно ознакомиться с заголовком (шапкой), чтобы не захламлять тему вопросами, на 9 из 10-ти которых ответы уже были.
mikutu
Могу добавить по поводу НОДа там есть такой параметр как "Обнаружение потенциально нежелательных приложений" если попробовать его отключить то вероятно он не будет распознавать эти библиотеки как вирусы!!!
Могу добавить по поводу НОДа там есть такой параметр как "Обнаружение потенциально нежелательных приложений" если попробовать его отключить то вероятно он не будет распознавать эти библиотеки как вирусы!!!
Подскажите, пожалуйста!
Удаляю файлы:
DeleteFile('{win}\xxx.dll');
Но как сделать, чтобы это удаление происходило именно в конце установки?
Спасибо!
Блин! Файл почему-то не удаляется!
Удаляю файлы:
DeleteFile('{win}\xxx.dll');
Но как сделать, чтобы это удаление происходило именно в конце установки?
Спасибо!
Блин! Файл почему-то не удаляется!
Цитата:
Подскажите, пожалуйста!
Удаляю файлы:
DeleteFile('{win}\xxx.dll');
Но как сделать, чтобы это удаление происходило именно в конце установки?
Спасибо!
Добавь Flags: postinstall
спрашиваю уже четвертый раз ):<
переделал скрипт...
результат: на странице выбора компонентов есть кнопка с текстурой, по нажатию которой появляется rtf описание компонента.
проблема: как сделать несколько кнопок (для каждого из компонентов) и...
можно ли сделать в данной реализации, чтобы отображалось название кнопки поверх текстуры.
[more=вот код...]
Код: #define MyAppName "Program"
#define MyAppVerName "1.0"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\Program 1.0
[Components]
Name: prog1; Description: program1; Types: var1; Flags: exclusive
Name: prog2; Description: program2; Types: var2; Flags: exclusive
[Types]
Name: var1; Description: prog1
Name: var2; Description: prog2; Flags: iscustom
[Files]
Source: Button1.bmp; Flags: dontcopy
Source: prog1.rtf; Flags: dontcopy
Source: prog2.rtf; Flags: dontcopy
[no][Code][/no]
var
Memo: TRichEditViewer;
CheckListBox: TNewCheckListBox;
CancelButton: TButton;
Check: Boolean;
i, CurPage: Integer;
InfoButton, UpdateButton: TButton;
InfoPage: TWizardPage;
InfoImage: TBitmapImage;
Procedure CheckFoldersOnClick(Sender: TObject);
Begin
if (InfoButton.Tag= 1) then begin
InfoButton.Caption:= 'Вернуться';
InfoButton.Cursor:= crDefault;
UpdateButton.Cursor:= crDefault;
CancelButton.Tag:= 1
end else
CancelButton.Tag:= 0
end;
Procedure UpdateButtonOnClick(Sender: TObject);
Begin
Check:=True;
end;
Procedure CloseInfo; Begin If InfoButton.Tag= 1 then InfoButton.OnClick(InfoButton) End;
Function BackButtonClick(CurPageID: Integer): Boolean;
Begin Result:= True CloseInfo End;
Function NextButtonClick(CurPageID: Integer): Boolean;
Begin If InfoButton.Tag= 1 then else Result:= True
if (i =wpWelcome) and (InfoButton.Tag= 1) then Result:= True
CloseInfo
end;
Procedure InfoButtonOnClick(Sender: TObject);
Begin
if InfoButton.Tag= 0 then begin
InfoPage:= CreateCustomPage(CurPage, 'Описание', '')
Memo := TRichEditViewer.Create(InfoPage);
Memo.Top := ScaleY(0);
Memo.Width := InfoPage.SurfaceWidth - ScaleX(0);;
Memo.Height := InfoPage.SurfaceHeight - ScaleY(0);
Memo.ScrollBars := ssVertical;
Memo.Parent := InfoPage.Surface;
Memo.Lines.LoadFromFile(ExpandConstant('{tmp}\prog1.rtf'));
UpdateButton:= TButton.Create(WizardForm);
with UpdateButton do begin
OnClick:= @UpdateButtonOnClick;
end;
UpdateButton.OnClick(UpdateButton);
WizardForm.NextButton.OnClick(WizardForm.NextButton);
InfoButton.Visible:= True
InfoButton.Caption:='Закрыть инфу';
InfoButton.Cursor:= crHand;
InfoButton.Tag:= 1;
end
else begin
InfoButton.Caption:= 'Описание';
InfoButton.Cursor:= crHelp;
InfoButton.Tag:= 0;
WizardForm.BackButton.OnClick(WizardForm.BackButton);
WizardForm.PageDescriptionLabel.Font.Color:= WizardForm.PageNameLabel.Font.Color
UpdateButton.Free
InfoPage.Free
end
End;
Procedure CurPageChanged(CurPageID: Integer);
Begin
CurPage:=CurPageID
if CurPageID=wpReady then begin WizardForm.ReadyMemo.ScrollBars:=ssVertical
end;
if CurPageID<>wpSelectComponents then begin InfoButton.Visible:= False
end;
if CurPageID=wpSelectComponents then begin InfoButton.Visible:= True
end;
end;
Procedure InitializeWizard;
Begin
ExtractTemporaryFile('prog1.rtf');
CancelButton:= WizardForm.CancelButton;
InfoButton:= TButton.Create(WizardForm);
with InfoButton do begin
Left:= WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
Top:= CancelButton.Top;
Width:= 132;
Height:= 27;
Caption:= 'Описание';
ShowHint:=True;
OnClick:= @InfoButtonOnClick;
Parent:= WizardForm;
InfoImage:=TBitmapImage.Create(WizardForm)
with InfoImage do begin
AutoSize:=True
Enabled:=False
ExtractTemporaryFile('Button1.bmp')
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button1.bmp')
Parent:=InfoButton
end;
end;
end;
переделал скрипт...
результат: на странице выбора компонентов есть кнопка с текстурой, по нажатию которой появляется rtf описание компонента.
проблема: как сделать несколько кнопок (для каждого из компонентов) и...
можно ли сделать в данной реализации, чтобы отображалось название кнопки поверх текстуры.
[more=вот код...]
Код: #define MyAppName "Program"
#define MyAppVerName "1.0"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\Program 1.0
[Components]
Name: prog1; Description: program1; Types: var1; Flags: exclusive
Name: prog2; Description: program2; Types: var2; Flags: exclusive
[Types]
Name: var1; Description: prog1
Name: var2; Description: prog2; Flags: iscustom
[Files]
Source: Button1.bmp; Flags: dontcopy
Source: prog1.rtf; Flags: dontcopy
Source: prog2.rtf; Flags: dontcopy
[no][Code][/no]
var
Memo: TRichEditViewer;
CheckListBox: TNewCheckListBox;
CancelButton: TButton;
Check: Boolean;
i, CurPage: Integer;
InfoButton, UpdateButton: TButton;
InfoPage: TWizardPage;
InfoImage: TBitmapImage;
Procedure CheckFoldersOnClick(Sender: TObject);
Begin
if (InfoButton.Tag= 1) then begin
InfoButton.Caption:= 'Вернуться';
InfoButton.Cursor:= crDefault;
UpdateButton.Cursor:= crDefault;
CancelButton.Tag:= 1
end else
CancelButton.Tag:= 0
end;
Procedure UpdateButtonOnClick(Sender: TObject);
Begin
Check:=True;
end;
Procedure CloseInfo; Begin If InfoButton.Tag= 1 then InfoButton.OnClick(InfoButton) End;
Function BackButtonClick(CurPageID: Integer): Boolean;
Begin Result:= True CloseInfo End;
Function NextButtonClick(CurPageID: Integer): Boolean;
Begin If InfoButton.Tag= 1 then else Result:= True
if (i =wpWelcome) and (InfoButton.Tag= 1) then Result:= True
CloseInfo
end;
Procedure InfoButtonOnClick(Sender: TObject);
Begin
if InfoButton.Tag= 0 then begin
InfoPage:= CreateCustomPage(CurPage, 'Описание', '')
Memo := TRichEditViewer.Create(InfoPage);
Memo.Top := ScaleY(0);
Memo.Width := InfoPage.SurfaceWidth - ScaleX(0);;
Memo.Height := InfoPage.SurfaceHeight - ScaleY(0);
Memo.ScrollBars := ssVertical;
Memo.Parent := InfoPage.Surface;
Memo.Lines.LoadFromFile(ExpandConstant('{tmp}\prog1.rtf'));
UpdateButton:= TButton.Create(WizardForm);
with UpdateButton do begin
OnClick:= @UpdateButtonOnClick;
end;
UpdateButton.OnClick(UpdateButton);
WizardForm.NextButton.OnClick(WizardForm.NextButton);
InfoButton.Visible:= True
InfoButton.Caption:='Закрыть инфу';
InfoButton.Cursor:= crHand;
InfoButton.Tag:= 1;
end
else begin
InfoButton.Caption:= 'Описание';
InfoButton.Cursor:= crHelp;
InfoButton.Tag:= 0;
WizardForm.BackButton.OnClick(WizardForm.BackButton);
WizardForm.PageDescriptionLabel.Font.Color:= WizardForm.PageNameLabel.Font.Color
UpdateButton.Free
InfoPage.Free
end
End;
Procedure CurPageChanged(CurPageID: Integer);
Begin
CurPage:=CurPageID
if CurPageID=wpReady then begin WizardForm.ReadyMemo.ScrollBars:=ssVertical
end;
if CurPageID<>wpSelectComponents then begin InfoButton.Visible:= False
end;
if CurPageID=wpSelectComponents then begin InfoButton.Visible:= True
end;
end;
Procedure InitializeWizard;
Begin
ExtractTemporaryFile('prog1.rtf');
CancelButton:= WizardForm.CancelButton;
InfoButton:= TButton.Create(WizardForm);
with InfoButton do begin
Left:= WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
Top:= CancelButton.Top;
Width:= 132;
Height:= 27;
Caption:= 'Описание';
ShowHint:=True;
OnClick:= @InfoButtonOnClick;
Parent:= WizardForm;
InfoImage:=TBitmapImage.Create(WizardForm)
with InfoImage do begin
AutoSize:=True
Enabled:=False
ExtractTemporaryFile('Button1.bmp')
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button1.bmp')
Parent:=InfoButton
end;
end;
end;
XЧестно порылся в поиске, но нашел только похожий на мой вопрос:
http://forum.ru-board.com/topic.cgi?forum=5&active=&topic=27438&start=1600
спрашивал Gizer, но внятного ответа так и небыло дано, хотя мне кажеться что в этом ничего сложного для знающего человека нет(
Цитата:
надо пару файлов из одной папки и пару из другой.. Уфф..надеюсь обьяснил подробней некуда %)).
http://forum.ru-board.com/topic.cgi?forum=5&active=&topic=27438&start=1600
спрашивал Gizer, но внятного ответа так и небыло дано, хотя мне кажеться что в этом ничего сложного для знающего человека нет(
Цитата:
День добрый, возникла надобность дописать режим обновления для инсталяшки, сами галочки сделать и т.д. проблем нету, вопрос вот в чем, как можно указать что устанавливать нужно только определенные файлы из всей кучи, а больше ничего не делать?
Допустим у меня есть набор файлов и папок, при чистой установке копирются все папки и файлы, а при обновлении только несколько файлов, все это для того чтобы уменьшить размер дистрибутива, а не пихать по разным папкам (а так же не создавать компонент которому присваивать отдельно эти пару файлов %)), а в установке при выборе обновления просто копировать нужные файлы из диструбтива.
примерно у меня папка cодержимое папки при чистой установке образно:
___________________________________________________
Установочная папка > data\audio\setting\redme.txt\proga.exe
при обновлении:
___________________________________________________
Установочная папка > proga.exe\readme.txt
Вот живой пример организации:
Код:Source: C:\777\guard\*; DestDir: {app}\777\Guard; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a
Source: C:\777\access\*; DestDir: {app}\777\Access; Flags: ignoreversion recursesubdirs createallsubdirs; Components: b
надо пару файлов из одной папки и пару из другой.. Уфф..надеюсь обьяснил подробней некуда %)).
nOobCrafter
[no][Files]
Source: C:\777\guard\*; DestDir: {app}\777\Guard; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a; Check: checking(false)
Source: C:\777\access\*; DestDir: {app}\777\Access; Flags: ignoreversion recursesubdirs createallsubdirs; Components: b; Check: checking(true)
[Code]
var
isUpdate:boolean;{если выбрано обновление - присвоить true}
function checking(param: boolean):boolean;
begin
If not isUpdate
Then Result:=true
Else Result:=param;
end;[/no]
[no][Files]
Source: C:\777\guard\*; DestDir: {app}\777\Guard; Flags: ignoreversion recursesubdirs createallsubdirs; Components: a; Check: checking(false)
Source: C:\777\access\*; DestDir: {app}\777\Access; Flags: ignoreversion recursesubdirs createallsubdirs; Components: b; Check: checking(true)
[Code]
var
isUpdate:boolean;{если выбрано обновление - присвоить true}
function checking(param: boolean):boolean;
begin
If not isUpdate
Then Result:=true
Else Result:=param;
end;[/no]
DeKaNszn
Спс большое, это уже лучше, но все же проблема несколько нерешена, как мне все же указать конкретные файлы которые надо скопировать?..
Спс большое, это уже лучше, но все же проблема несколько нерешена, как мне все же указать конкретные файлы которые надо скопировать?..
Цитата:
Цитата:
Подскажите, пожалуйста!
Удаляю файлы:
DeleteFile('{win}\xxx.dll');
Но как сделать, чтобы это удаление происходило именно в конце установки?
Спасибо!
Добавь Flags: postinstall
Как это добаввить в секции [Code]?
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
Предыдущая тема: в очередной раз босудим антивиры?
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.