Войти

Показать полную графическую версию : Скрипты 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

jdcorg
13-01-2017, 13:58
сперва почитать про current user и original user
потом сформулировать вопрос правильно, а я пока поищу у себя, когда-то давным давно я так делал :D »
О current user и original user Google ничего не выдаёт и в документации на jrsoftware тоже не нашел.
Может у Вас есть ссылочки?

Valera90
13-01-2017, 14:01
Всем привет как убрать выбор компонентов, на картинке выделил !

R.i.m.s.k.y.
13-01-2017, 14:09
О current user и original user Google ничего не выдаёт и в документации на jrsoftware тоже не нашел.
Может у Вас есть ссылочки? »
есть http://forum.oszone.net/post-2321537.html#post2321537 :laugh: (вторая ссылка в яндексе по поиску originaluser currentuser)

я те прям работающий кусок кода дам

[CODE]
var
Original_SID, Original_UserName : string;

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif


const
WTS_CURRENT_SERVER_HANDLE = 0;
WTS_CURRENT_SESSION = (-1);
WTSUserName = 5;

function WTSQuerySessionInformation(hServer: THandle; SessionId, WTSInfoClass: DWORD; var ppBuffer: Longint; var pBytesReturned: DWORD): BOOL; external 'WTSQuerySessionInformation{#A}@wtsapi32.dll stdcall';
procedure WTSFreeMemory(pMemory: Longint); external 'WTSFreeMemory@wtsapi32.dll stdcall';
function GetLastError(): DWORD; external 'GetLastError@kernel32.dll stdcall';

function GetLoggedOnUserName(): String;
var
aNames: TArrayOfString;
dwLength: DWORD;
lpBuffer: Longint;
begin
Result:=GetUserNameString; // по-умолчанию текущий пользователь, для WinXP, в которой WTSQuerySessionInformation не отрабатывает, ошибка 1702
try
if not WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, lpBuffer, dwLength) then
begin
//dwLength := GetLastError();
//MsgBox(IntToStr(dwLength), mbError, mb_Ok);
Exit;
end;
Result := CastIntegerToString(lpBuffer);
finally
WTSFreeMemory(lpBuffer);
end;
end;

type
PSID = record
buffer: array [0..1024] of char;
end;

function LookupAccountName(lpSystemName: DWORD; lpAccountName: AnsiString;
var Sid: PSID; var cbSid: DWORD; ReferencedDomainName: AnsiString;
var cbReferencedDomainName: DWORD; var peUse: DWORD): BOOL; external 'LookupAccountNameA@advapi32.dll stdcall';
function ConvertSidToStringSid(var Sid: PSID; var pStringSid: DWORD): BOOL; external 'ConvertSidToStringSidA@advapi32.dll stdcall';
function lstrcat(lpString1: AnsiString; lpString2: DWORD):DWORD; external 'lstrcat@kernel32.dll stdcall';

function GetUserSID(userName: AnsiString):string;
var
Sid: PSID;
cbSid, len, peUse, ssid: DWORD;
ansi: AnsiString;
Success: BOOL;
begin
cbSid := 1024;
len := 1024;
ansi := StringOfChar(#0, 1024);
Success := LookupAccountName(0, userName, Sid, cbSid, ansi, len, peUse);
if Success then
begin
ConvertSidToStringSid(Sid, ssid);
ansi := StringOfChar(#0,1024);
lstrcat(ansi,ssid);
len := pos(#0,ansi);
Result := copy(string(ansi),1,len-1);
end;
end;

function GetOriginalSID(s:string): string;
begin
Result := Original_SID;
end;

function SVPSettingsFolder(string : string) : string;
var s:string;
begin
if (SVPSettingsFolderTrue) then begin
result := ExpandConstant('{userappdata}');
if IsComponentSelected('nastrSVP\settingsLocate\localuser') then
begin
if Original_UserName = GetUserNameString then
result := ExpandConstant('{userappdata}')
else
if RegQueryStringValue(HKU, Original_SID+'\Volatile Environment', 'APPDATA', s) then
result := RemoveBackslashUnlessRoot(s)
else
result := ExpandConstant('{commonappdata}'); // если вдруг не прочиталось из реестра
end;
if IsComponentSelected('nastrSVP\settingsLocate\publicuser') then result := ExpandConstant('{commonappdata}');
end else result := '!!! SVPSettingsFolder not defined !!!';
end;

Function InitializeSetup: Boolean;
begin
Original_UserName := GetLoggedOnUserName;
Original_SID := GetUserSID(original_UserName);
end;


кто догадается от установщика какой проги этот кусок кода тот может взять с полки пирожок, там их два, можно взять средний :)

Valera90,
procedure InitializeWizard();
begin
...
WizardForm.TypesCombo.Hide
...
end;

jdcorg
13-01-2017, 14:26
я те прям работающий кусок кода дам »
Спасибо!

R.i.m.s.k.y.
13-01-2017, 14:29
jdcorg, спасибо надо не говорить а нажимать :)
вкрации original user входит в ОС, current user запускает прогу runas

Valera90
13-01-2017, 14:45
Привет всем еще раз, помню тут был простой скрипт у кого то пример на добавление картинок при наведение мышкой на компонент, скиньте пожалуйста

Nordek
13-01-2017, 15:12
на добавление картинок при наведение мышкой на компонент »#662 (http://forum.oszone.net/post-2169372-662.html)

jdcorg
13-01-2017, 22:51
я те прям работающий кусок кода дам »
При установке должны меняться значения разделов реестра в ветке HKCU.
Я вижу, что этого не происходит ни у текущего юзера, ни у админа.
Тогда простая замена имени юзера в пути к каталогам не имеет смысла.

R.i.m.s.k.y.
13-01-2017, 23:09
jdcorg, УМВР
добавь MSGBOX (имя пользователя, куст реестра, путь до папки) и посмотри верно ли определяется все пути

jdcorg
14-01-2017, 00:38
dcorg, УМВР
добавь MSGBOX (имя пользователя, куст реестра, путь до папки) и посмотри верно ли определяется все пути »

Запускал установку на админской учётке - все файлы и записи в реестре устанавливаются корректно.
Запускал от имени админа на учётке простого юзера: файлы устанавливаются в соответствующие каталоги простого юзера, но записей в HKCU нет. Я так понимаю, что шаманство с файловыми путями в установочном файле не меняет принципа операционной системы- запустил от имени админа значит ОС все действия выполняет именно для учётки админа.

R.i.m.s.k.y.
14-01-2017, 10:57
jdcorg, покажи запись в реестр в своем скрипте

jdcorg
14-01-2017, 12:36
jdcorg, покажи запись в реестр в своем скрипте »
Root: "HKCU"; Subkey: "Software\Microsoft\Office\14.0\Excel\Security\FileBlock"; ValueType: dword; ValueName: "AccessVBOM"; ValueData: "1";

R.i.m.s.k.y.
14-01-2017, 12:38
Я так понимаю, что шаманство с файловыми путями в установочном файле не меняет принципа операционной системы- запустил от имени админа значит ОС все действия выполняет именно для учётки админа. »
частицу "не" не там поставил :D
ну и конЬцепцию original/current user не уяснил

Root: "HKCU"; Subkey: "Software\Microsoft\Office\14.0\Excel\Security\FileBlock"; ValueType: dword; ValueName: "AccessVBOM"; ValueData: "1"; »
я думал ты догадаешься что путь в реестре меняется на
HKU, Original_SID+ »
т.е. в твоем случаеRoot: HKU; Subkey: {code:GetOriginalSid}\Software\Microsoft\Office\14.0\Excel\Security\FileBlock; ValueType: dword; ValueName: "AccessVBOM"; ValueData: "1"; »

jdcorg
14-01-2017, 13:04
я думал ты догадаешься что путь в реестре меняется на »
Именно поэтому я не использовал твои функции. Мне надо менять значения в реестре только для текущего пользователя, а не для всех.
Это не возможно?

R.i.m.s.k.y.
14-01-2017, 13:11
jdcorg, таак
похоже мы еще не знаем значений ключей реестра
https://support.microsoft.com/ru-ru/kb/243330
https://en.wikipedia.org/wiki/Windows_Registry#Root_keys
Abbreviated HKU, HKEY_USERS contains subkeys corresponding to the HKEY_CURRENT_USER keys for each user profile actively loaded on the machine, though user hives are usually only loaded for currently logged-in users.
т.е. HKU\Original_SID\... по сути есть HKCU original user
домашнее задание: поменять ключ в HKU\Original_SID\ и посмотреть что с ним будет в HKCU

задача со звездочкой: найти в перечисленном значения в реестре для всех.

jdcorg
14-01-2017, 13:34
домашнее задание: поменять ключ в HKU\Original_SID\ и посмотреть что с ним будет в HKCU »
Прописал HKU, при установке ошибка создания ключа сбой 87.

R.i.m.s.k.y.
14-01-2017, 13:43
Прописал HKU, при установке ошибка создания ключа сбой 87. »
- петька, приборы!
- 87!
:)

покажи код, скрин и как воспроизводится ошибка, в деталях

jdcorg
14-01-2017, 14:08
покажи код, скрин и как воспроизводится ошибка, в деталях »
Отсутствует идентификатор SVPSettingsFolderTrue. Где его взять?

- петька, приборы! »
:) С HKCU всё получилось. Благодарю за терпение!

R.i.m.s.k.y.
14-01-2017, 17:09
Отсутствует идентификатор SVPSettingsFolderTrue. »
он принимает значение True если пользователь при установке выбрал хранение настроек в папке
Тебе он не нужен, тебе главное понять принцип и выдрать из моего примера нужное

С HKCU всё получилось. »
чет мне кажеццо что все равно неправильно сделал
покажи скрипт в части касающейся

jdcorg
15-01-2017, 01:50
чет мне кажеццо что все равно неправильно сделал »
Если работает, то всё сделал правильно. Спасибище тебе!
В сэтапе есть файлы, которые устанавливаются при выборе галки (Components). Я хочу оставить возможность выбора установки компонента, но не таскать его в установочном файле, а подгрузить из сети. Есть примеры на этот счёт?




© OSzone.net 2001-2012