iglezz,
Спасибо, но там без чекушки ничего не понятно, а после чекушки вообще.
inco1,
Это правильно работает, но на семерке в папку
SetShellVarContext current $APPDATA добавились 2 профиля встроенных пользователей Гость и Администратор. А на одиннадцатой к ним присоединились интернетовский и еще какой то. Все эти учетки не активны. Не могу прикрутить логику, чтобы их отсеять. Может знатоки помогут в этом деле. Пробовал вот так, но не отсеиваются. Видимо нужен подход не моего уровня.
Код:
Код: Выделить всё
!include "MUI2.nsh"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
ShowInstDetails show
OutFile GetUserSID.exe
Caption "GetUserSID"
!define GetUserSID "!insertmacro CallGetUserSID"
!macro CallGetUserSID USERNAME SID
System::Store S
StrCpy '$0' '${USERNAME}'
StrCmp '$0' '' 0 +2
ExpandEnvStrings '$0' "%USERNAME%"
System::Call "*(&t1024)i.r1"
System::Call "advapi32::LookupAccountName(tn,tr0,ir1,*i1024,tn,*i1024,*in)i.r0"
IntCmp $0 1 0 +2 +2
System::Call "advapi32::ConvertSidToStringSid(ir1,*t.s)"
IntCmp $0 1 +2 0 0
Push error
System::Free $1
System::Store L
Pop "${SID}"
!macroend
!ifdef NSIS_UNICODE
!define STR %s
!else
!define STR %S
!endif
Section
System::Call "netapi32::NetQueryDisplayInformation(wn,i1,i0,i-1,i${NSIS_MAX_STRLEN},*i.R0,*i.R1)i.R4"
${If} $R4 = 0
${For} $R4 1 $R0
System::Call "*$R1(i.R2,i.R3,i,w,i,i)"
IntFmt '$R2' ${STR} $R2
IntFmt '$R3' ${STR} $R3
${GetUserSID} '$R2' '$R5'
IntOp $R1 $R1 + 24
StrCpy $R6 "$R2"
StrCpy $R7 "C:\Users\$R6"
StrCmp $R7 0 Not
SetOutPath "C:\Users\$R2\AppData\Roaming\test"
File "test.txt"
Not:
${Next}
System::Call "netapi32::NetApiBufferFree(iR1)"
${EndIf}
SectionEnd