Войти

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


Страниц : 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 126

sergey3695
14-06-2015, 18:28
Если кого-то оскорбил данным сообщением извините. мне просто понравилось if - then end, я ни в коем случае не пытался тут умничать, да и умным я себя назвать не могу... так среднестатистический юзер. И да, т.к. я не участвовал в начале обсуждения, я мог ни до конца понять требуемое условие.

AlekseyPopovv
14-06-2015, 19:29
sergey3695, if - then end » и такое бывает :cool: Всё приходит с опытом! Вам спасибо за помощь.

PlanktoN
14-06-2015, 20:53
AlekseyPopovv, а так?
Procedure TempFile;
begin
ExtractTemporaryFile ('***.exe');
ExtractTemporaryFile ('botva2.dll')
ExtractTemporaryFile ('ISWin7logo.dll')
end;

Procedure InitializeWizard();
Begin
TempFile;
end;

sergey3695
14-06-2015, 23:18
function InitializeSetup(): Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\ISWin7logo.dll')) then ExtractTemporaryFile('ISWin7logo.dll');
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:= True;
end;

procedure InitializeWizard();
Begin
if not FileExists(ExpandConstant('{tmp}\***.exe')) then ExtractTemporaryFile('***.exe');
end;

AlekseyPopovv
15-06-2015, 17:01
PlanktoN, sergey3695, спасибо, я разобрался.

Valera90
16-06-2015, 13:30
Всем привет, не работает прокрутка колесиком мышки, работает если тока нажать на компонент тогда в низ спускает, как решить данную проблему?

habib2302
16-06-2015, 19:11
Доброе время суток. Возможно ли сделать так чтобы создавалась папка с название раздела из реестра?
http://s020.radikal.ru/i711/1506/82/ee158a96d4eb.png (http://s45.radikal.ru/i109/1506/7f/3b6a94874631.jpg) http://s019.radikal.ru/i631/1506/59/97903faf4040.png (http://s42.radikal.ru/i097/1506/03/27a5363733e7.jpg)

TryRooM
16-06-2015, 19:46
habib2302, Примерно так.

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001\test2')); //создаем папки
end;
end;

habib2302
16-06-2015, 20:05
TryRooM, вы поняли что мне за код дали?
название этого раздела в реестре бывает разным в зависимости от системы и т.д. и т.п.

TryRooM
16-06-2015, 20:18
habib2302, Вопрос был в чем. Создать папку с название раздела из реестра, что я и сделал.
А то, что название этого раздела в реестре бывает разным в зависимости от системы и т.д. и т.п. и так понятно.

habib2302
16-06-2015, 20:27
TryRooM, значит нужно учитывать что раздел в реестре у каждой системы будет разным. а просто взять и скопировать название раздела я и сам могу

TryRooM
16-06-2015, 20:53
habib2302, Можно добавить проверку на систему, и создавать папку исходя из этого.

function ForWindows8One(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Windows 8.1 version is 6.3 (workstation)
if (Version.Major = 6) and
(Version.Minor = 3) and
(Version.ProductType = VER_NT_WORKSTATION)
then
Result := True
else
Result := False;
end;

function ForWindows7(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Windows 7 version is 6.1 (workstation)
if (Version.Major = 6) and
(Version.Minor = 1) and
(Version.ProductType = VER_NT_WORKSTATION)
then
Result := True
else
Result := False;
end;

function ForWindowsVistaAndWindows2008(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Anything with major version 6 where we won't use Windows 7 driver
if (Version.Major = 6) and
(not ForWindows7)
then
Result := True
else
Result := False;
end;

function ForWindows2003(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Windows 2003 version is 5.2 (server)
if (Version.Major = 5) and
(Version.Minor = 2) and
(Version.ProductType <> VER_NT_WORKSTATION)
then
Result := True
else
Result := False;
end;

function ForWindowsXP(): Boolean;
var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
// Anything with major version 5 where we won't use Windows 2003 driver
if (Version.Major = 5) and
(not ForWindows2003)
then
Result := True
else
Result := False;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
If ForWindowsXP then
ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001-XP\test2')); //создаем папки
If ForWindowsVistaAndWindows2008 then
ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001-Vista\test2')); //создаем папки
If ForWindows7 then
ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001-7\test2')); //создаем папки
If ForWindows8One then
ForceDirectories(ExpandConstant('{src}\S-1-5-21-3919186426-968546183-1294672792-1001-8\test2')); //создаем папки
end;
end;

habib2302
16-06-2015, 22:10
TryRooM, я не умею предсказывать название этого раздела!

Dodakaedr
16-06-2015, 22:32
habib2302, для этой цели есть библа getsid. В поиске по теме найдешь.

Iska
17-06-2015, 01:01
Возможно ли сделать так чтобы создавалась папка с название раздела из реестра? »
Обычно, когда в код, вместо обращения к HKCU, пытаются затащить обращение напрямую к «HKU\SID текущего пользователя» или жёстко хардкодить с SID'ом — значит, явно что-то не так с самим кодом.

Вам сие для чего?

habib2302
17-06-2015, 09:00
Iska, для создания папки с название раздела HKU\SID на скринах приведен пример
http://forum.oszone.net/post-2519231-707.html

PlanktoN
18-06-2015, 02:17
Помогите чтоб был виден текст на Выборе задач,Выборе Группы для Ярлыков и Страница Установки FreeArc(Просто там не виден текст какой файл распаковывается сколько времени осталось)

Iska
18-06-2015, 03:04
Iska, для создания папки с название раздела HKU\SID на скринах приведен пример »
habib2302, это-то я видел. Не пойму — зачем?

El Sanchez
18-06-2015, 11:02
это-то я видел. Не пойму — зачем? »
Iska, может для песочницы надо.

habib2302, пример:

#define A = (Defined UNICODE) ? "W" : "A"
const
TOKEN_READ = $00020008;
TokenUser = 1;
ERROR_INSUFFICIENT_BUFFER = 122;
HEAP_ZERO_MEMORY = $8;
MAX_PATH = 260;

type
SID_AND_ATTRIBUTES = record
Sid: Longint;
Attributes: DWORD;
end;

TOKEN_USER = record
User: SID_AND_ATTRIBUTES;
end;

function GetCurrentProcess: THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; out TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function GetTokenInformation(TokenHandle: THandle; TokenInformationClass: Integer; TokenInformation: Longint; TokenInformationLength: DWORD; out ReturnLength: DWORD): BOOL; external 'GetTokenInformation@advapi32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetProcessHeap: THandle; external 'GetProcessHeap@kernel32.dll stdcall';
function HeapAlloc(hHeap: THandle; dwFlags, dwBytes: DWORD): Longint; external 'HeapAlloc@kernel32.dll stdcall';
function HeapFree(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): BOOL; external 'HeapFree@kernel32.dll stdcall';
function RtlMoveMemoryTU(out Destination: TOKEN_USER; const Source: Longint; len: Integer): Integer; external 'RtlMoveMemory@kernel32.dll stdcall';
function ConvertSidToStringSid(Sid: Longint; out StringSid: Longint): BOOL; external 'ConvertSidToStringSid{#A}@advapi32.dll stdcall';
function LocalFree(hMem: THandle): THandle; external 'LocalFree@kernel32.dll stdcall';

///////////////////////////////////////////
function GetCurrentProcessOwnerSID: String;
var
hProcessToken, hHeap: THandle;
tuTokenUser: TOKEN_USER;
lpTokenUser, lpStringSid: Longint;
dwReturnLength: DWORD;
begin
if not OpenProcessToken(GetCurrentProcess, TOKEN_READ, hProcessToken) then Exit;
if not GetTokenInformation(hProcessToken, TokenUser, 0, 0, dwReturnLength) and BOOL(DLLGetLastError = ERROR_INSUFFICIENT_BUFFER) then
begin
hHeap := GetProcessHeap;
if hHeap = 0 then Exit;
lpTokenUser := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, dwReturnLength);
if lpTokenUser <> 0 then
begin
if GetTokenInformation(hProcessToken, TokenUser, lpTokenUser, dwReturnLength, dwReturnLength) then
begin
RtlMoveMemoryTU(tuTokenUser, lpTokenUser, SizeOf(tuTokenUser));
if ConvertSidToStringSid(tuTokenUser.User.Sid, lpStringSid) then
begin
Result := CastIntegerToString(lpStringSid);
LocalFree(lpStringSid);
end;
end;
HeapFree(hHeap, 0, lpTokenUser);
end;
end;
CloseHandle(hProcessToken);
end;

//////////////////////////
procedure InitializeWizard;
begin
CreateDir(ExpandConstant('{src}\') + GetCurrentProcessOwnerSID);
end;

studentvnau@vk
18-06-2015, 23:54
Всем привет, уважаемые знатоки! Внимание, вопрос:
1) Есть 7 разных изображений, одинакового формата .bmp, одинакового размера в пикселях, но различных по смысловому наполнению.
2) Их обязательно нужно отобразить ТОЛЬКО по 1 согласно 7 страницам установщика - 1 картинку на стр 1, вторую - на стр 2 и тд. при этом остальных не должно быть видно.
3) Картинки должны розмещаться на Parent:= Wizardform; (смысл вы поняли).
4) Картинки имеют такой же отступ сверху, как и кнопки назад, далее и отмена по стандарту.
Поиск по разделам не помог, решение ранее у меня было, но так как утеряны файлы с готовым вариантом, прошу помощи тут.
Заранее спасибо за ответ.




© OSzone.net 2001-2012