Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

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

Старожил


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

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


AlekseyPopovv,
В первом случае сложностей не вижу
Во втором случае вижу пару особенностей в виде необходимости получения SID и преобразования буквы диска в имя устройства

Для получения SID текущено пользователя можно применить макрос GetCurrentUserSID
GetCurrentUserSID
Код: Выделить весь код
!define GetCurrentUserSID `!insertmacro GetCurrentUserSID `
!macro GetCurrentUserSID out_SID
  Push $0 ; fn ret / out_SID
  Push $1 ; SID struct
  Push $2 ; tmp
  
  System::Call "advapi32::GetUserName(t.s, *i${NSIS_MAX_STRLEN}) i.r0"
  StrCmp $0 0 +5
  System::Call 'advapi32::LookupAccountName(i0, ts, @r1, *i${NSIS_MAX_STRLEN}, t .r2, *i ${NSIS_MAX_STRLEN}, *i .r2 ) i.r0'
  StrCmp $0 0 +3
  System::Call 'advapi32::ConvertSidToStringSid(pr1, *t.r0 )'
  Goto +2
  StrCpy $0 ''
  
  Pop $2
  Pop $1
  Exch $0

  Pop ${out_SID}
!macroend
Пример использования:
Код: Выделить весь код
${GetCurrentUserSID} $0
DetailPrint 'SID = [$0]'


Если надо пройтись по всем пользователям, то можно использовать макрос EnumUsersReg EnumUsersRegEx (пример).

Для преобразования пути в простейшем случае (c:\path -> \Device\HarddiskVolume3\path) можно использовать такой макрос:
Скрытый текст
Код: Выделить весь код
!define GetPathWithDeviceName `!insertmacro GetPathWithDeviceName `
!macro GetPathWithDeviceName out_DevPath in_DOSPath
  Push '${in_DOSPath}'
  Exch $0
  Push $1
  Push $2

  StrLen $1 $0
  StrCmp $1 1 0 +3
    StrCpy $1 $0:
    Goto +2

  StrCpy $1 $0 2
  System::Call 'kernel32::QueryDosDevice(tr1, t.r2, i${NSIS_MAX_STRLEN} ) i.r3'
  
  StrCmp $3 0 0 +3
    StrCpy $0 ''
    Goto +3

  StrCpy $0 $0 '' 2
  StrCpy $0 $2$0

  Pop $2
  Pop $1
  Exch $0

  Pop ${out_DevPath}
!macroend
Пример использования:
Код: Выделить весь код
${GetPathWithDeviceName} $0 "C:\path\to\file"
DetailPrint 'path = [$0]'

Последний раз редактировалось iglezz, 01-06-2023 в 18:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:41, 01-06-2023 | #2731