PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 [94] 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Dodakaedr
20-10-2014, 22:23
Nordek, а копировать и перемещать как?

Nordek
20-10-2014, 23:52
Dodakaedr,

[Code]
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C XCOPY {sd}\2 {sd}\1 /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;

[Code]
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C MD {sd}\1 && MOVE {sd}\2 {sd}\1'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;

Dodakaedr, Win + R »
cmd /k help

kotyarko@fb
21-10-2014, 00:13
Например? »
Можно использовать SHFileOperation.

Dodakaedr
21-10-2014, 17:07
kotyarko@fb, делал как в примере описано не работает. У меня unicode версия.

saurn
21-10-2014, 19:58
Назрел вопрос: как в инно удалить из памяти массив строк, типа Ars: array of String? В дельфи можно отправить в Finalize(), а здесь как? Просто привести к "0"?

Dodakaedr
21-10-2014, 21:07
Nordek, А если в пути есть пробел, то как быть? Так не копирует.[Code]
procedure InitializeWizard();
var
RCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C XCOPY ""{commonappdata}\Astra\DR Updater"" ""{src}\Data\DR Updater"" /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, RCode);
end;

ROMKA-1977
21-10-2014, 22:00
Подскажите как выполнить кнопкой переход на нужную страницу? В моём случае необходимо выполнить переход кастомной кнопкой с ReadyPage на страницу SelectDirPage, не кликая несколько раз кнопку "Назад".

Dodakaedr
22-10-2014, 21:44
Как провести проверку на наличие атрибута "Только чтение" у файла hosts и если оно присутствует то убрать, внести изменения и снова поставить атрибут "Только чтение", а если отсутствует атрибут, то просто внести изменения?

sergey3695
22-10-2014, 21:52
Dodakaedr,
http://forum.ru-board.com/topic.cgi?forum=5&topic=33457&start=990&limit=1&m=1
далее сам.
У меня unicode версия. »
для Unicode
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

function GetFileAttributes(lpFileName: string): integer;
external 'GetFileAttributes{#A}@kernel32.dll stdcall';

function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer;
external 'SetFileAttributes{#A}@kernel32.dll stdcall';

Dodakaedr
22-10-2014, 23:13
Вот собрал, все выполняется кроме последнего, атрибут не становится обратно. Хэлп.
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Code]
function GetFileAttributes(lpFileName: string): integer;
external 'GetFileAttributes{#A}@kernel32.dll stdcall';

function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer;
external 'SetFileAttributes{#A}@kernel32.dll stdcall';

procedure SetAttr();
var
FileName:string;
begin
FileName:= ExpandConstant('{sys}\drivers\etc\hosts');
if (GetFileAttributes(FileName) and FILE_ATTRIBUTE_NORMAL) = FILE_ATTRIBUTE_NORMAL then
SetFileAttributes(FileName, FILE_ATTRIBUTE_READONLY);
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
HostFile: TStringList;
FileName: string;
begin
FileName:= ExpandConstant('{sys}\drivers\etc\hosts');
if (GetFileAttributes(FileName) and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
SetFileAttributes(FileName, FILE_ATTRIBUTE_NORMAL);
HostFile := TStringList.Create;
try
with HostFile do
if CurStep = ssPostInstall then
begin
LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
Add('127.0.0.1 tratata.ru');
SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts'));
end;
finally
HostFile.free;
end;
SetAttr;
end;

Nordek
23-10-2014, 01:05
А если в пути есть пробел, то как быть? »
[Code]
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C XCOPY "{commonappdata}\Astra\DR Updater" "{src}\New Folder" /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;

saurn
23-10-2014, 01:22
Как провести проверку на наличие атрибута "Только чтение" у файла hosts и если оно присутствует то убрать, внести изменения и снова поставить атрибут "Только чтение", а если отсутствует атрибут, то просто внести изменения? »
все выполняется кроме последнего, атрибут не становится обратно »

#define A = (Defined UNICODE) ? "W" : "A"


function GetFileAttributes( lpFileName: String ): DWORD; external 'GetFileAttributes{#A}@kernel32.dll stdcall';
function SetFileAttributes( lpFileName: String; dwFileAttributes: DWORD ): BOOL; external 'SetFileAttributes{#A}@kernel32.dll stdcall';


procedure WriteStr( const szFile: String; szArray: array of String );
var
i: Integer;
tList: TStringList;
bAttrib: BOOL;
begin
if ( GetFileAttributes( szFile ) and FILE_ATTRIBUTE_READONLY ) = FILE_ATTRIBUTE_READONLY then // если у файла есть атрибут только чтение то
bAttrib := SetFileAttributes( szFile, FILE_ATTRIBUTE_NORMAL); // снимаем атрибут

tList := TStringList.Create; // создаем стринг-лист
with tList do
try
LoadFromFile( szFile ); // загружаем файл

for i := 0 to GetArrayLength( szArray ) - 1 do
Add( szArray[i] ) // пишем в файл строки из масива szArray

SaveToFile( szFile ); // сохраняем файл
finally

Free; // разрушаем стринг-лист
end;

if bAttrib then // Проверяем был ли снят атрибут, и если да то
SetFileAttributes( szFile, FILE_ATTRIBUTE_READONLY ); // ставим прежний атрибкт
end;


procedure CurStepChanged( CurStep: TSetupStep );
begin
if CurStep = ssPostInstall then
WriteStr( ExpandConstant( '{sys}\drivers\etc\hosts' ), ['127.0.0.1 www.com', // список строк, через запятую.
'127.0.0.1 www.net',
'127.0.0.1 www.ru'] );
end;

Dodakaedr
23-10-2014, 15:39
saurn, Спасибо вам большое!!! И можно вас попросить сделать проверку на строку...тоесть если строка уже присутствует то ничего не делаем, если же её нету то прописываем... и на удаление такое же. Спасибо!

sergey3695
23-10-2014, 21:02
Dodakaedr, в лс.

audiofeel
24-10-2014, 10:09
такой вопрос вот назрел, в связи с новой анимацией окон в Windows, как её включить? ( я не про новую, а вообще про анимацию), задействовать на первой ботве (не защищенной) примеров не нашел,
спасибо !!!

sergey3695
24-10-2014, 21:33
новой анимацией окон в Windows »
What?
я не про новую, а вообще про анимацию »
на первой ботве (не защищенной) »
I not understand you.

audiofeel
24-10-2014, 22:10
sergey3695,
a question that's long overdue, in connection with the new animation window on Windows, as it include? (I'm not talking about a new, and in general about the animation), use the first tops (not secure) examples not found
thanks !!!
What? »
http://www.thevista.ru/page17751-novaya_animatsiya_okon_windows_10_v_deystvii
I not understand you. »
http://krinkels.org/threads/dopolnitelnye-biblioteki-dlja-inno-setup.9/
так понятней ?

sergey3695
25-10-2014, 00:52
Цитата audiofeel:
так понятней ? »
При использовании ботвы, не работает анимация окна в Windows 10? Если так то мне негде тестить. Даже без понятия что там.

audiofeel
25-10-2014, 01:14
При использовании ботвы, не работает анимация окна в Windows 10? Если так то мне негде тестить. Даже без понятия что там. »
ну черт с ней с виндоус 10, все таки при использовании ботвы можно "включить" анимацию или нет ?? пересмотрел немного скриптов, не нашел примеров как ее включить , может ботва и не при чем ?? ну тогда как ее включить?? или она не включается, любая не обязательно "новая" ??
http://youtu.be/5oS0DScnHqc

sergey3695
25-10-2014, 07:32
audiofeel, может это потому что у тя в скрипте стиль bsNone. Попробуй просто чисто на 10-ке
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Code ]
const
GWL_STYLE = (-16);
WS_CAPTION = $C00000;

function GetWindowLong(Wnd: HWnd; Index: Integer): Longint;
external 'GetWindowLongA@user32.dll stdcall';

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
external 'SetWindowLongA@user32.dll stdcall';

Procedure InitializeWizard();
begin
// SetWindowLong(WizardForm.Handle, GWL_STYLE,
// GetWindowLong(WizardForm.Handle, GWL_STYLE) and not WS_CAPTION);
WizardForm.BorderStyle:= bsNone;
end;
Первый или второй закомментированный вариант.




© OSzone.net 2001-2012