environ(имя пользователя) против advapi32.dll

Я знаю, что есть как минимум 2 способа получить имя пользователя в приложении Access.

Вы можете использовать функцию окружения:

environ("username")

И вы можете использовать GetUsername в advapi32.dll

Public Declare Function GetUserName& Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long)

s = String(l, Chr(32))
GetUserName s, l
username = Left$(s, l - 1)

Какой из вышеперечисленных методов наиболее безопасен? И почему?

Возможно, какая-то справочная информация, приложения используются как на локальных компьютерах, так и на удаленных рабочих столах.


person SouthL    schedule 24.01.2012    source источник


Ответы (2)


Как сказал Саймон, переменные среды открыты для манипулирования, однако некоторым людям также нравится избегать вызовов API, если это так, то это простая альтернатива:

Public Function GetUser() As String

    Dim WNet As Object

    Set WNet = CreateObject("WScript.Network")

    GetUser = WNet.UserName

    Set WNet = Nothing

End Function
person Matt Donnan    schedule 24.01.2012
comment
+1, за исключением того, что я бы пропустил оператор Set Nothing, потому что WNet будет уничтожен, когда выйдет за рамки. - person JimmyPena; 24.01.2012

Переменные среды могут устанавливаться и сбрасываться кем угодно, пропадать и так далее, и эти случаи, как правило, трудно воспроизвести, если кто-то даже думает об этом как об источнике ошибок.

Я определенно пошел бы с advapi.

person Simon Richter    schedule 24.01.2012