Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Gnom_aka_Lexander
02-04-2014, 09:35
Dodakaedr, тогда просто удали эту строчку. у тебя уже есть BorderStyle := bsDialog;, этого достаточно. и системного меню не будет, потому что его нет у диалоговых окон, как и кнопок свернуть и развернуть во весь экран.
Dodakaedr
02-04-2014, 09:37
тогда просто удали эту строчку. »
Спс, сработало!
R.i.m.s.k.y.
02-04-2014, 09:42
В общем не так давно тут мне давали код для получения SID пользователя (http://forum.oszone.net/post-2319623.html#post2319623)
почти работает, не работает в случае переименования пользователя что в доменных сетях не редкость, в таких случах в SID возвращается Username
вот рабочий код дельфи, работает и на переименованных пользователях
function LookupAccountName(lpSystemName, lpAccountName: PWideChar;
Sid: PSID; var cbSid: DWORD; ReferencedDomainName: PWideChar;
var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountNameA';
function ConvertSidToStringSid(Sid: PSID; out StringSid: PChar): BOOL; stdcall; external 'ADVAPI32.DLL' name 'ConvertSidToStringSidA';
function GetUserSID(userName: string):string;
var
Sid: PSID;
cbSid: DWORD;
cbReferencedDomainName : DWORD;
ReferencedDomainName: string;
peUse: SID_NAME_USE;
Success: BOOL;
lpSystemName : string;
lpAccountName: string;
StringSid : PChar;
begin
Sid:=nil;
cbSid := 0;
cbReferencedDomainName := 0;
LookupAccountName(nil, PChar(userName), nil, cbSid, nil, cbReferencedDomainName, peUse);
if cbSid>0 then
begin
SetLength(ReferencedDomainName, cbReferencedDomainName);
Sid := AllocMem(cbSid);
Success := LookupAccountName(0, PChar(userName), Sid, cbSid, PChar(ReferencedDomainName), cbReferencedDomainName, peUse);
if Success then
begin
ConvertSidToStringSid(Sid, StringSid);
Result := string(StringSid);
end;
FreeMem(Sid);
end;
end;
тяму не хватило его интегрировать в инно
может Серега или ЭльСанчез справятся
Dodakaedr
02-04-2014, 09:44
R.i.m.s.k.y., с этим можешь помочь http://forum.oszone.net/post-2331745-192.html???
R.i.m.s.k.y.
02-04-2014, 09:49
Dodakaedr,
как-то так
[Registry]
Root: HKU; SubKey: {code:getOriginalSID}\Software; ValueType: string; ValueName: Path; ValueData: {app}\; Flags: uninsdeletekeyifempty uninsdeletevalue noerror
[code]
function getOriginalSID: string;
begin
result := GetUserSID('Администратор')
утвж
Dodakaedr
02-04-2014, 09:50
R.i.m.s.k.y., спс. вечером попробую.
Gnom_aka_Lexander
02-04-2014, 09:53
с этим можешь помочь »
с год назад дела длл-ку, для определения SID пользователя, на плюсах, поскольку с паскалем так и не пошло - на Win7 и старще какоето исключение выскакивало, устал искать его, в итоге плюнул. В приложении пример и добавлена секция [Registry] специально для Dodakaedr.
Dodakaedr
02-04-2014, 09:55
специально для Dodakaedr. »
Спс и это попробую
R.i.m.s.k.y.
02-04-2014, 10:50
Gnom_aka_Lexander, проверил
система запущена от user (originaluser)
установщик - от admin (currentuser)
получил сид админа (currentuser) что неинтересно
как передавать параметром имя пользователя от которого запущена система (а не установщик) чтобы получить sid originaluser?
Gnom_aka_Lexander
02-04-2014, 10:55
R.i.m.s.k.y., честно говоря, не думал, что это понадобится, чуть позже допилю.
R.i.m.s.k.y.
02-04-2014, 10:57
честно говоря, не думал, что это понадобится, чуть позже допилю. »
рабочий код выше
можешь брать и вставлять в длл
Gnom_aka_Lexander
02-04-2014, 12:38
R.i.m.s.k.y., в нем как раз и была у меня проблема, при чем код отрабатывал, но при закрытии инсталла выскакивала ошибка, так и не нашел, где косяк у меня там, поэтому и сделал по другому.
Прицепил, должно показывать залогиненого пользователя.
R.i.m.s.k.y.
02-04-2014, 13:09
Gnom_aka_Lexander, Спасибо, проверю
Но кмк оно должно на вход принимать имя пользователя, а выхлопом выдавать его sid
Независимо от состояния логина
Stealthmax
02-04-2014, 13:45
Спасибо, но это не то что хотел, при использовании biSystemMenu появляется полное системное меню, а мне нужно только кнопка закрыть, как оно срабатывает без скина. »
Со скином и без работает:
//Убираем кнопку "Свернуть/Развернуть/Масштабирование" в окне установщика, только "Закрыть" //
const
GWL_STYLE = -16;
WS_MINIMIZEBOX = $20000;
WS_MAXIMIZEBOX = $10000;
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
procedure InitializeWizard();
begin
SetWindowLong(WizardForm.handle, GWL_STYLE, GetWindowLong(WizardForm.handle, GWL_STYLE)and(not WS_MINIMIZEBOX)and(not WS_MAXIMIZEBOX));
end;
Работает 100%!!!
Stealthmax
02-04-2014, 14:14
Подскажите, как использовать пользовательские ключи командной строки, кроме /COMPONENTS и /TASKS, для своих функций, типа Check: бла-бла-бла? Или это не реализовано в Inno ?
R.i.m.s.k.y.
02-04-2014, 14:25
Stealthmax, самому реализовывать
Function InitializeSetup: Boolean;
var i : integer;
Begin
for i:=2 to ParamCount do begin
if ( Pos(LowerCase('/silent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
if ( Pos(LowerCase('/verysilent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
end;
if isSilent then begin
MsgBox('Тихая установка не поддерживается', mbInformation, MB_OK);
Result := False;
exit;
end;
end;
Stealthmax
02-04-2014, 16:41
самому реализовывать
Function InitializeSetup: Boolean;
Begin
if ( Pos(LowerCase('/silent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
if ( Pos(LowerCase('/verysilent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
if isSilent then begin
MsgBox('Тихая установка не поддерживается', mbInformation, MB_OK);
Result := False;
exit;
end;
end; »
Понял и не понял одновременно. Изображу кусок скрипта.
[Files]
Source: "{port}\*"; DestDir: "{code:GetPath}"; Flags: ignoreversion createallsubdirs recursesubdirs; Check: Portable
[_Code]
function Portable: Boolean;
begin
Result := PortableRadioButton.Checked;
end;Каким образом создать ключ "/p" для выполнения данного условия в командной строке, то бишь скрытно?
А также: возможно ли переназначить ключ "/VERYSILENT", например, в ключ "S" без привязки к регистру?
Поиск по форуму вывел на несколько постов: 1 (http://forum.oszone.net/post-1582819-409.html), 2 (http://forum.oszone.net/post-1582897-412.html), 3 (http://forum.oszone.net/post-1582069-391.html). Но я реально дубовый))) Не могу склеить воедино суть сюжета. Если не затруднит, то можно наглядно в рабочем состоянии изобразить это действо?!
R.i.m.s.k.y.
02-04-2014, 16:56
[Files]
Source: "{port}\*"; DestDir: "{code:GetPath}"; Flags: ignoreversion createallsubdirs recursesubdirs; Check: Portable
[Code]
var isportable : boolean;
function Portable: Boolean;
begin
Result := PortableRadioButton.Checked or isportable;
end;
Function InitializeSetup: Boolean;
var i : integer;
Begin
for i:=2 to ParamCount do begin
if ( Pos(LowerCase('/p'), Lowercase(ParamStr(i))) > 0 ) then isportable := true else isportable := false;
end;//for
end;
Stealthmax, Смотри от #517 сообщения. Так же сообщение #1780 (http://forum.oszone.net/post-2279192-1780.html)
Dinvin4ester
02-04-2014, 19:15
Ребята,почему долго идет процесс установки?Сжимал игру на 980 мб,а ставится как батла 4..
Вот скрипт - http://multi-up.com/964088.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.