Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


имеем двух пользователей: user и admin
система под пользователем, запуск от админа
запись в реестре происходит куда надо: при запуске от админа - в HKCU пользователя
Но вот при деинсталляция при запуске от админа/пользователя ключи удалаются HKCU у админа
Код: Выделить весь код
[Registry]
Root: HKU; SubKey: {code:getOriginalSID}\Software; ValueType: string; ValueName: Path; ValueData: {app}\; Flags: uninsdeletekeyifempty uninsdeletevalue noerror

http://forum.oszone.net/post-2319623.html#post2319623
#define A = (Defined UNICODE) ? "W" : "A"
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 GetLoggedOnUser(const IsSID: Boolean): String;
var
    i: Integer;
    aNames: TArrayOfString;
    dwLength: DWORD;
    lpBuffer: Longint;
begin
    if not RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList', aNames) then Exit;
    try
        if not WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, lpBuffer, dwLength) then Exit;
        Result := CastIntegerToString(lpBuffer);
        if IsSID then for i := 0 to GetArrayLength(aNames)-1 do if Pos(Lowercase(Result), LowerCase(ExpandConstant(Format('{reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%s,ProfileImagePath|}', [aNames[i]])))) > 0 then
        begin
            Result := aNames[i];
            Break;
        end;
    finally
        WTSFreeMemory(lpBuffer);
    end;
end;

function getOriginalSID:string
begin
result := GetLoggedOnUser(True);
end;

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 22:44, 11-03-2014 | #37