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

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;

Nordek
02-04-2014, 16:58
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