Хех иконка то не нарисовалась... хотя крестик остался....
» Inno Setup (создание инсталяционных пакетов)
serg_aka_lain
Цитата:
способ работает, но из-за присвоения папке арр атрибута sistem, она становится скрытой (( Как с этим борться?
Цитата:
Вот способ:
В дистрибутив включ. пустой файл "desktop.ini"
Source: "desktop.ini"; DestDir: "{app}"; Attribs: "hidden system"; Flags: ignoreversion;
Папка в которую устанавливается тоже должна иметь - Attribs: "system";
[Dirs]
Name: "{app}"; Attribs: "system"; Flags: uninsalwaysuninstall;
Ну и в конце установки записываем в "desktop.ini" путь к иконке .exe, или .ico файлу.
способ работает, но из-за присвоения папке арр атрибута sistem, она становится скрытой (( Как с этим борться?
Forslay
если ты про мой способ, то иконка рисуется, а кнопка "Х" становится недоступной
пришлось проверить даже
ЗЫ не очень понимаю смысл убирания кнопки "Х". Alt+F4 все равно никто не отменял да и по кнопке "отмена" выполняются те же действия
Добавлено:
machetos
1. скрытым должен стать только файл desktop.ini, на каталог не ставь атрибуты. от атрибутов вообще ничего не зависит
2. тебе писали еще один способ, без таскания с собой пустого файла
если ты про мой способ, то иконка рисуется, а кнопка "Х" становится недоступной
пришлось проверить даже
ЗЫ не очень понимаю смысл убирания кнопки "Х". Alt+F4 все равно никто не отменял да и по кнопке "отмена" выполняются те же действия
Добавлено:
machetos
1. скрытым должен стать только файл desktop.ini, на каталог не ставь атрибуты. от атрибутов вообще ничего не зависит
2. тебе писали еще один способ, без таскания с собой пустого файла
Лан, вы кончено уж простите, но раз никто не знает ответа на мой вопрос (или не хочет отвечать) тогда более ламерский вопрос - можно ли после завершения деинтсалляции заставить выполниться какой-то внешний файл (ехе, тхт, бат и т.п.). Как допустим
[Run]
Filename: {app}\bin\main.exe; Description: {cm:LaunchProgram}; Flags: nowait postinstall skipifsilent
запускает main.exe после завершения инсталляции (если не снять галочку конечно), так и хотелось бы что-нить запустить после ДЕинсталляции
[Run]
Filename: {app}\bin\main.exe; Description: {cm:LaunchProgram}; Flags: nowait postinstall skipifsilent
запускает main.exe после завершения инсталляции (если не снять галочку конечно), так и хотелось бы что-нить запустить после ДЕинсталляции
Hater_Decay, смотри в справке Exec и ShellExec. Описание в Pascal Scripting --> Support Functions Reference --> Files functions.
Прописываешь в
Код:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usDone then
begin
...
end;
end;
Прописываешь в
Код:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usDone then
begin
...
end;
end;
machetos
Не может быть, всё должно работать . вот пример через
секцию Code , без пустого файла Desktop.ini и использования секции Dirs
var
ErrorCode: Integer;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', '[.ShellClassInfo]' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', 'IconFile' + '=' + ExpandConstant('{app}') + '\Icon.ico' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', 'IconIndex' + '=' + '0' + #13#10, true);
Exec('attrib', ' +s ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{app}\desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
end;
p.s. (и не забыть всё удалить при деинсталляции.)
Не может быть, всё должно работать . вот пример через
секцию Code , без пустого файла Desktop.ini и использования секции Dirs
var
ErrorCode: Integer;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', '[.ShellClassInfo]' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', 'IconFile' + '=' + ExpandConstant('{app}') + '\Icon.ico' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', 'IconIndex' + '=' + '0' + #13#10, true);
Exec('attrib', ' +s ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{app}\desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
end;
p.s. (и не забыть всё удалить при деинсталляции.)
elapse
Cпасибо, так и сделал, всё заработало. Насчёт читать хелп это конечно универсально полезный совет, только вот понять что где писать в ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean; куда сложнее чем увидеть готовую строку и из неё переделать.
Cпасибо, так и сделал, всё заработало. Насчёт читать хелп это конечно универсально полезный совет, только вот понять что где писать в ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean; куда сложнее чем увидеть готовую строку и из неё переделать.
serg_aka_lain
Цитата:
вот мой код как есть (точ такой как у тебя)
[Setup]
AppName=myprog
AppVerName=myprog
DefaultDirName=C:\myprog
DefaultGroupName=myprog
Compression=lzma
SolidCompression=yes
[Files]
Source: C:\1\myprog.exe; DestDir: "{app}"; Flags: ignoreversion
[Code]
var
ErrorCode: Integer;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', '[.ShellClassInfo]' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', 'IconFile' + '=' + ExpandConstant('{app}') + '\myprog.exe' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', 'IconIndex' + '=' + '0' + #13#10, true);
Exec('attrib', ' +s ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{app}\desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
end;
Но папка с программой СКРЫТА
разве в строке Exec('attrib', ' +s ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode) ей не придаётся атрибут системной? Что делать?
Добавлено:
а если убрать атрибуты системной (скрытой), то ini-шник создаётся, скрывается, внутри всё прописано, но папка с прогой всё та же папка, без иконки
Цитата:
Не может быть, всё должно работать . вот пример через
секцию Code
вот мой код как есть (точ такой как у тебя)
[Setup]
AppName=myprog
AppVerName=myprog
DefaultDirName=C:\myprog
DefaultGroupName=myprog
Compression=lzma
SolidCompression=yes
[Files]
Source: C:\1\myprog.exe; DestDir: "{app}"; Flags: ignoreversion
[Code]
var
ErrorCode: Integer;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', '[.ShellClassInfo]' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', 'IconFile' + '=' + ExpandConstant('{app}') + '\myprog.exe' + #13#10, true);
SaveStringToFile(ExpandConstant('{app}')+'\desktop.ini', 'IconIndex' + '=' + '0' + #13#10, true);
Exec('attrib', ' +s ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
Exec('attrib', ' +h +s ' + '"' + ExpandConstant('{app}\desktop.ini') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
end;
end;
Но папка с программой СКРЫТА
разве в строке Exec('attrib', ' +s ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode) ей не придаётся атрибут системной? Что делать?
Добавлено:
а если убрать атрибуты системной (скрытой), то ini-шник создаётся, скрывается, внутри всё прописано, но папка с прогой всё та же папка, без иконки
Hater_Decay
Цитата:
Примерно так:
//ShellExec('', путь\имя файла, 'параметр запуска', рабочая папка, SW_SHOW, ewNoWait, ErrorCode)
пример:
[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ErrorCode: Integer;
begin
if CurUninstallStep = usDone then
begin
ShellExec('', ExpandConstant('{win}\NOTEPAD.EXE'), '', ExpandConstant('{win}'), SW_SHOW, ewNoWait, ErrorCode)
end
end;
Цитата:
куда сложнее чем увидеть готовую строку и из неё переделать.
Примерно так:
//ShellExec('', путь\имя файла, 'параметр запуска', рабочая папка, SW_SHOW, ewNoWait, ErrorCode)
пример:
[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ErrorCode: Integer;
begin
if CurUninstallStep = usDone then
begin
ShellExec('', ExpandConstant('{win}\NOTEPAD.EXE'), '', ExpandConstant('{win}'), SW_SHOW, ewNoWait, ErrorCode)
end
end;
machetos
вроде достаточно этого
Exec('attrib', ' +r ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
не ставь скрытый и системный
вроде достаточно этого
Exec('attrib', ' +r ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
не ставь скрытый и системный
htuos
С атрибутом "только для чтения" - "+r" тоже работает.
С атрибутом "только для чтения" - "+r" тоже работает.
Цитата:
machetos
вроде достаточно этого
Exec('attrib', ' +r ' + '"' + ExpandConstant('{app}') + '"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
не ставь скрытый и системный
Спасибо, работает!!!
Цитата:
тебе писали еще один способ, без таскания с собой пустого файла
без пустого а сразу - это хорошо, но вот только при деинсталяции папка с прогой не удаляется, т.к. там остаётся файл этот, может можно ему задать какой-нибудь атрибут, чтоб он тоже деинсталился?
machetos
удали через Code
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
DeleteFile(ExpandConstant('{app}') + '\desktop.ini');
end;
end;
удали через Code
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
DeleteFile(ExpandConstant('{app}') + '\desktop.ini');
end;
end;
serg_aka_lain
и верно.. туплю )))
спасибо
и верно.. туплю )))
спасибо
Народ, помогите пожалуйста реализовать функцию в инсталляхе: Print Button Click, если я правильно написал....
Мне нужно что бы на странице лицензионного соглашения, была кнопочка: Печать лицензионного соглашения... Заранее очень благодарю....
Через _ISSI неполучается, ошибка при компилляции....
Мне нужно что бы на странице лицензионного соглашения, была кнопочка: Печать лицензионного соглашения... Заранее очень благодарю....
Через _ISSI неполучается, ошибка при компилляции....
Forslay, берёшь из шапки Inno Setup Extensions Knowledge Base, находишь там 100-ую статью - с копипастом проблем возникнуть не должно. Лень качать - см. [more=здесь][no]
[Setup]
AppName=PrintLicV5
AppVerName=PrintLicV5
DefaultDirName={pf}\PrintLicV5
DisableStartupPrompt=true
Uninstallable=false
DisableDirPage=true
OutputBaseFilename=PrintLicV5
CreateAppDir=false
DisableProgramGroupPage=true
LicenseFile=MyLicense.rtf
[Files]
Source: MyLicense.rtf; Flags: dontcopy
[Code]
// Print license
procedure PrintButtonClick(Sender: TObject);
var WordpadLoc: String;
RetCode: Integer;
begin
if MsgBox( 'Do you want to print License to default printer ?', mbConfirmation, MB_YESNO ) = IDYES then
begin
// get WordPad location
RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE',
'', WordpadLoc);
// on NT/2000 it's a REG_EXPAND_SZ, so expand constant ProgramFiles
StringChange( WordpadLoc, '%ProgramFiles%', ExpandConstant('{pf}') );
// remove " at begin and end pf string
StringChange( WordpadLoc, '"', '');
// extract License file
try
ExtractTemporaryFile('MyLicense.rtf');
if not Exec( WordPadLoc, ' /p ' + ExpandConstant('{tmp}\MyLicense.rtf') ,
ExpandConstant('{tmp}'), SW_HIDE, ewNoWait , RetCode ) then
MsgBox('Problems printing License file !' + IntToStr(RetCode), mbError, mb_Ok) ;
except
RaiseException('Problem printing license '+#13#13 +
'(Error ''' + GetExceptionMessage + ''' occurred)');
end;
end; // if user want to print the license
end;
procedure InitializeWizard();
var
PrintButton: TButton;
begin
PrintButton := TButton.Create(WizardForm.LicensePage);
PrintButton.Caption := '&Print';
PrintButton.Left := WizardForm.LicenseMemo.Left +
WizardForm.LicenseMemo.Width -
PrintButton.Width;
PrintButton.Top := WizardForm.LicenseMemo.Top +
WizardForm.LicenseMemo.Height + 16;
PrintButton.OnClick := @PrintButtonClick;
PrintButton.Parent := WizardForm.LicenseAcceptedRadio.Parent;
end;[/no][/more].
[Setup]
AppName=PrintLicV5
AppVerName=PrintLicV5
DefaultDirName={pf}\PrintLicV5
DisableStartupPrompt=true
Uninstallable=false
DisableDirPage=true
OutputBaseFilename=PrintLicV5
CreateAppDir=false
DisableProgramGroupPage=true
LicenseFile=MyLicense.rtf
[Files]
Source: MyLicense.rtf; Flags: dontcopy
[Code]
// Print license
procedure PrintButtonClick(Sender: TObject);
var WordpadLoc: String;
RetCode: Integer;
begin
if MsgBox( 'Do you want to print License to default printer ?', mbConfirmation, MB_YESNO ) = IDYES then
begin
// get WordPad location
RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE',
'', WordpadLoc);
// on NT/2000 it's a REG_EXPAND_SZ, so expand constant ProgramFiles
StringChange( WordpadLoc, '%ProgramFiles%', ExpandConstant('{pf}') );
// remove " at begin and end pf string
StringChange( WordpadLoc, '"', '');
// extract License file
try
ExtractTemporaryFile('MyLicense.rtf');
if not Exec( WordPadLoc, ' /p ' + ExpandConstant('{tmp}\MyLicense.rtf') ,
ExpandConstant('{tmp}'), SW_HIDE, ewNoWait , RetCode ) then
MsgBox('Problems printing License file !' + IntToStr(RetCode), mbError, mb_Ok) ;
except
RaiseException('Problem printing license '+#13#13 +
'(Error ''' + GetExceptionMessage + ''' occurred)');
end;
end; // if user want to print the license
end;
procedure InitializeWizard();
var
PrintButton: TButton;
begin
PrintButton := TButton.Create(WizardForm.LicensePage);
PrintButton.Caption := '&Print';
PrintButton.Left := WizardForm.LicenseMemo.Left +
WizardForm.LicenseMemo.Width -
PrintButton.Width;
PrintButton.Top := WizardForm.LicenseMemo.Top +
WizardForm.LicenseMemo.Height + 16;
PrintButton.OnClick := @PrintButtonClick;
PrintButton.Parent := WizardForm.LicenseAcceptedRadio.Parent;
end;[/no][/more].
Продолжаю изучение...
У меня во время инсталляции запускается батник,в этот момент полоса прогресса останавливается(процесс длится несколько минут).Как именно для этой строки (во время работы батника) сделать свою полосу прогресса?
Source: unpack.bat; DestDir: {app}; AfterInstall: Unpack(); Flags: ignoreversion
Нашёл здесь такой пример создания полосы:
var
ProgressBar: TNewProgressBar;
procedure CurPageChanged(CurPageID: Integer);
var
i:Integer;
begin
If CurPageID=wpInstalling
then
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ProgressBar.Left := ScaleY(40);
ProgressBar.Top := ScaleX(180);
ProgressBar.Width := ScaleY(415);
ProgressBar.Height := ScaleX(18);
ProgressBar.Parent := WizardForm;
ProgressBar.Position := 0; //указывает количество заполняемых секторов
end;
begin
If CurPageID=wpFinished
then
ProgressBar.Hide
end;
end;
[[more][/more]
Как их связать,пока не догоню...
elapse, большое тебе спасибо братка.... Всё работает ! Респект!
Народ как сделать так чтоб компьютер перезагружался без потверждения???
Помогите кто может.....нужно в реестр внести вот это -
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7B97E000527E10F478A01C92247B8F4E\InstallProperties; ValueType: string; ValueName: InstallSource; ValueData: F:\; Flags: uninsdeletekey
где (ValueName: InstallSource; ValueData: F:\) а именно F:\ - это буква DVD Room.
Но эта буква может быть разной.
Как сделать проверку буквы DVD Room и внести нужную в реестр?
Заранее благодарен
Добавлено:
Вопрос 2.... Создаем ярлык
Как сделать автоматом если система 32 разряда то создается ярлык -
Name: {userdesktop}\{#MyAppName}; Filename: {app}\Bin32\Crysis.exe; Tasks: desktopicon; IconFilename: {app}\Bin32\Crysis.exe; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {app}\Bin32
Если 64 разряда то -
Name: {userdesktop}\{#MyAppName}; Filename: {app}\Bin64\Crysis64.exe; Tasks: desktopicon; IconFilename: {app}\Bin64\Crysis64.exe; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {app}\Bin64
???
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7B97E000527E10F478A01C92247B8F4E\InstallProperties; ValueType: string; ValueName: InstallSource; ValueData: F:\; Flags: uninsdeletekey
где (ValueName: InstallSource; ValueData: F:\) а именно F:\ - это буква DVD Room.
Но эта буква может быть разной.
Как сделать проверку буквы DVD Room и внести нужную в реестр?
Заранее благодарен
Добавлено:
Вопрос 2.... Создаем ярлык
Как сделать автоматом если система 32 разряда то создается ярлык -
Name: {userdesktop}\{#MyAppName}; Filename: {app}\Bin32\Crysis.exe; Tasks: desktopicon; IconFilename: {app}\Bin32\Crysis.exe; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {app}\Bin32
Если 64 разряда то -
Name: {userdesktop}\{#MyAppName}; Filename: {app}\Bin64\Crysis64.exe; Tasks: desktopicon; IconFilename: {app}\Bin64\Crysis64.exe; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {app}\Bin64
???
GRom V
Цитата:
а если в системе больше 1 привода, что тогда писать?
Цитата:
Как сделать проверку буквы DVD Room и внести нужную в реестр?
а если в системе больше 1 привода, что тогда писать?
htuos
Цитата:
Без разници - главное чтобы был существующий!
Цитата:
а если в системе больше 1 привода, что тогда писать?
Без разници - главное чтобы был существующий!
GRom V
1)
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7B97E000527E10F478A01C92247B8F4E\InstallProperties"; ValueName: "InstallSource"; ValueType: String; ValueData: "{src}"; Flags: uninsdeletekey
Неправильно понял задачу
1)
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\7B97E000527E10F478A01C92247B8F4E\InstallProperties"; ValueName: "InstallSource"; ValueType: String; ValueData: "{src}"; Flags: uninsdeletekey
Неправильно понял задачу
GRom V, примерно [more=так]
[Код]
const
DRIVE_CDROM = 5;
var
n: Integer;
function GetLogicalDrives: DWord;
external 'GetLogicalDrives@kernel32.dll';
function GetDriveType( nDrive: String ): Longint;
external 'GetDriveTypeA@kernel32.dll';
function GetDriveLetter(Param: String): String;
begin
for n := 1 to 31 do
if (GetLogicalDrives and (1 shl n)) > 0 then
if GetDriveType(Chr(65 + n) + ':\') = DRIVE_CDROM then
begin
Result := Chr(65 + n) + ':\'
Exit;
end;
end;
[/more]. Добавляешь эту часть в свой проект, а в ValueData указываешь {code:GetDriveLetter} вместо F:\. Только непонятно, что делать, если отсутствуют дисководы, отменять инсталляцию, писать новое значение? Если не подходит пустое значение, подправить не сложно - надеюсь, сделаешь сам.
Добавлено:
По второму вопросу - также использовать {code:...}, проверка на битность - функцией IsWin64, описание см. в Хелпе.
Добавлено:
Chanka, скорее всего, ты как раз правильно понял задачу. Очевидно, надо чтобы в реестр заносилась буква диска, с которого происходит инсталляция, если это - дисковод, то разрешаем запись в реестр, если нет (жёсткий, флешка и т.д.) - отменяем инсталляцию... Тогда используем ExtractFileDrive из константы {src}. В любом случае --> {code:...}
[Код]
const
DRIVE_CDROM = 5;
var
n: Integer;
function GetLogicalDrives: DWord;
external 'GetLogicalDrives@kernel32.dll';
function GetDriveType( nDrive: String ): Longint;
external 'GetDriveTypeA@kernel32.dll';
function GetDriveLetter(Param: String): String;
begin
for n := 1 to 31 do
if (GetLogicalDrives and (1 shl n)) > 0 then
if GetDriveType(Chr(65 + n) + ':\') = DRIVE_CDROM then
begin
Result := Chr(65 + n) + ':\'
Exit;
end;
end;
[/more]. Добавляешь эту часть в свой проект, а в ValueData указываешь {code:GetDriveLetter} вместо F:\. Только непонятно, что делать, если отсутствуют дисководы, отменять инсталляцию, писать новое значение? Если не подходит пустое значение, подправить не сложно - надеюсь, сделаешь сам.
Добавлено:
По второму вопросу - также использовать {code:...}, проверка на битность - функцией IsWin64, описание см. в Хелпе.
Добавлено:
Chanka, скорее всего, ты как раз правильно понял задачу. Очевидно, надо чтобы в реестр заносилась буква диска, с которого происходит инсталляция, если это - дисковод, то разрешаем запись в реестр, если нет (жёсткий, флешка и т.д.) - отменяем инсталляцию... Тогда используем ExtractFileDrive из константы {src}. В любом случае --> {code:...}
elapse
Цитата:
Спасибо - то что нужно! С этим разобрался.
Для второго вопроса нашол:
function InitializeSetup : Boolean;
var error : Integer;
begin
if IsWin64 then
begin
Exec(ExpandConstant('{src}') + '\File_64.exe', '', '', sw_show, ssInstall, error);
Result:= True;
end
else
begin
Exec(ExpandConstant('{src}') + '\File_32.exe', '', '', sw_show, ssInstall, error);
Result:=True;
end
end;
Это запуск экзешника в зависимости от разрядности......только не могу прикрутить этот скрипт к секции [Icons]
Подскажи как это сделать (если можно) т.е
[Icons]
Name: {userdesktop}\{#MyAppName}; Filename: {app}\Bin32\Crysis.exe; Tasks: desktopicon; IconFilename: {app}\Bin32\Crysis.exe; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {app}\Bin32 - 32разряда
Name: {userdesktop}\{#MyAppName}; Filename: {app}\Bin64\Crysis64.exe; Tasks: desktopicon; IconFilename: {app}\Bin64\Crysis64.exe; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {app}\Bin64 -64разряда
Спасибо...
Цитата:
GRom V, примерно так. Добавляешь эту часть в свой проект, а в ValueData указываешь {code:GetDriveLetter} вместо F:\. Только непонятно, что делать, если отсутствуют дисководы, отменять инсталляцию, писать новое значение? Если не подходит пустое значение, подправить не сложно - надеюсь, сделаешь сам.
Спасибо - то что нужно! С этим разобрался.
Для второго вопроса нашол:
function InitializeSetup : Boolean;
var error : Integer;
begin
if IsWin64 then
begin
Exec(ExpandConstant('{src}') + '\File_64.exe', '', '', sw_show, ssInstall, error);
Result:= True;
end
else
begin
Exec(ExpandConstant('{src}') + '\File_32.exe', '', '', sw_show, ssInstall, error);
Result:=True;
end
end;
Это запуск экзешника в зависимости от разрядности......только не могу прикрутить этот скрипт к секции [Icons]
Подскажи как это сделать (если можно) т.е
[Icons]
Name: {userdesktop}\{#MyAppName}; Filename: {app}\Bin32\Crysis.exe; Tasks: desktopicon; IconFilename: {app}\Bin32\Crysis.exe; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {app}\Bin32 - 32разряда
Name: {userdesktop}\{#MyAppName}; Filename: {app}\Bin64\Crysis64.exe; Tasks: desktopicon; IconFilename: {app}\Bin64\Crysis64.exe; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {app}\Bin64 -64разряда
Спасибо...
GRom V, неужели так сложно? [more=Подробнее][no]
[Code]
function GetFilename(Param: String): String;
begin
if IsWin64 then
Result := ExpandConstant('{app}\Bin64\Crysis64.exe')
else
Result := ExpandConstant('{app}\Bin32\Crysis.exe');
end;
function GetWorkingDir(Param: String): String;
begin
if IsWin64 then
Result := ExpandConstant('{app}\Bin64')
else
Result := ExpandConstant('{app}\Bin32');
end;
[Icons]
Name: {userdesktop}\{#MyAppName}; Filename: {code:GetFilename}; Tasks: desktopicon; IconFilename: {code:GetFilename}; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {code:GetWorkingDir};
[/no][/more].
[Code]
function GetFilename(Param: String): String;
begin
if IsWin64 then
Result := ExpandConstant('{app}\Bin64\Crysis64.exe')
else
Result := ExpandConstant('{app}\Bin32\Crysis.exe');
end;
function GetWorkingDir(Param: String): String;
begin
if IsWin64 then
Result := ExpandConstant('{app}\Bin64')
else
Result := ExpandConstant('{app}\Bin32');
end;
[Icons]
Name: {userdesktop}\{#MyAppName}; Filename: {code:GetFilename}; Tasks: desktopicon; IconFilename: {code:GetFilename}; Comment: Запустить Crysis; IconIndex: 0; WorkingDir: {code:GetWorkingDir};
[/no][/more].
Подскажите, как относительно языка менялся Key: Lang; на соответствующую цифру,
в [more=файле]Resolution 1024x768
Depth 32bit
Quality 0
MusicVol 5
SoundVol 5
CameraMode 0
FullScreen 1
Lang 1
[/more]нет Section: ; и при компиляции ругаеться.
[Files]
Source: gameconf.ini; DestDir: {app}; Flags: ignoreversion
[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Name: ukrainian; MessagesFile: compiler:Languages\Ukrainian.isl
[INI]
Filename: {app}\BaseT\gameconf.ini; Section: ; Key: Lang; String: 0; Languages: english
Filename: {app}\BaseT\gameconf.ini; Section: ; Key: Lang; String: 1; Languages: russian
Filename: {app}\BaseT\gameconf.ini; Section: ; Key: Lang; String: 2; Languages: ukrainian
в [more=файле]Resolution 1024x768
Depth 32bit
Quality 0
MusicVol 5
SoundVol 5
CameraMode 0
FullScreen 1
Lang 1
[/more]нет Section: ; и при компиляции ругаеться.
[Files]
Source: gameconf.ini; DestDir: {app}; Flags: ignoreversion
[Languages]
Name: english; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Name: ukrainian; MessagesFile: compiler:Languages\Ukrainian.isl
[INI]
Filename: {app}\BaseT\gameconf.ini; Section: ; Key: Lang; String: 0; Languages: english
Filename: {app}\BaseT\gameconf.ini; Section: ; Key: Lang; String: 1; Languages: russian
Filename: {app}\BaseT\gameconf.ini; Section: ; Key: Lang; String: 2; Languages: ukrainian
GRom V
Еще можно без секции Code [more]
Код:
#define MainExe "{app}\Bin32\crysis.exe"
#define MainExe64 "{app}\Bin64\crysis.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)
[Icons]
Name: "{group}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Check: IsWin64
Name: "{group}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Check: not IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64
Name: "{group}\Удалить игру"; FileName: "{uninstallexe}"; IconFileName: "{sys}\shell32.dll"; IconIndex: 32
Еще можно без секции Code [more]
Код:
#define MainExe "{app}\Bin32\crysis.exe"
#define MainExe64 "{app}\Bin64\crysis.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)
[Icons]
Name: "{group}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Check: IsWin64
Name: "{group}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Check: not IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#AppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64
Name: "{group}\Удалить игру"; FileName: "{uninstallexe}"; IconFileName: "{sys}\shell32.dll"; IconIndex: 32
Genri
Приветствую!
Не подскажешь по моему вопросу?
Как для определённого файла(на время его работы),сделать свою полосу прогресса?
Приветствую!
Не подскажешь по моему вопросу?
Как для определённого файла(на время его работы),сделать свою полосу прогресса?
elapse
Цитата:
Огромное спасибо...все окк.
Добавлено:
elapse
Прошу просчения....я не такой бетман в паскале как ты....подскажи еще примерчик (если не трудно):
есть
[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\Games\{{10656425-AFEB-42F3-9E51-D4A92B7EE022}; ValueType: string; ValueName: ConfigInstallType; ValueData: 2; Flags: uninsdeletekey; Tasks: WGE
Как сделать чтобы - если стоит виста то эта ветка вносилась в реестр, если нет то не вносилась?
Заранее спасибочки...
Добавлено:
valeron87
Интересный вариант...
Глянь личку....
Да....а зачем эти строки...вроде и без них все работает?
#define MainExe32Dir Copy(MainExe32, 1, RPos("\", MainExe32)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)
Цитата:
GRom V, неужели так сложно? Подробнее.
Огромное спасибо...все окк.
Добавлено:
elapse
Прошу просчения....я не такой бетман в паскале как ты....подскажи еще примерчик (если не трудно):
есть
[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\Games\{{10656425-AFEB-42F3-9E51-D4A92B7EE022}; ValueType: string; ValueName: ConfigInstallType; ValueData: 2; Flags: uninsdeletekey; Tasks: WGE
Как сделать чтобы - если стоит виста то эта ветка вносилась в реестр, если нет то не вносилась?
Заранее спасибочки...
Добавлено:
valeron87
Интересный вариант...
Глянь личку....
Да....а зачем эти строки...вроде и без них все работает?
#define MainExe32Dir Copy(MainExe32, 1, RPos("\", MainExe32)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
Предыдущая тема: Поиск в WinDjView
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.