Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
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)
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, вы поняли что мне за код дали?
название этого раздела в реестре бывает разным в зависимости от системы и т.д. и т.п.
habib2302, Вопрос был в чем. Создать папку с название раздела из реестра, что я и сделал.
А то, что название этого раздела в реестре бывает разным в зависимости от системы и т.д. и т.п. и так понятно.
habib2302
16-06-2015, 20:27
TryRooM, значит нужно учитывать что раздел в реестре у каждой системы будет разным. а просто взять и скопировать название раздела я и сам могу
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. В поиске по теме найдешь.
Возможно ли сделать так чтобы создавалась папка с название раздела из реестра? »
Обычно, когда в код, вместо обращения к 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, для создания папки с название раздела 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.