[AccessD] OT: Broken API Call in WinXP: GetEnvironmentVariab le?

Heenan, Lambert Lambert.Heenan at AIG.com
Fri Nov 21 12:12:18 CST 2003


Um... not sure about the API call for the environment variable, but Access
97 (and up, I believe) has the Environ() function, call it like this...

strEnvVar = Environ("CLIENTNAME")

Also, to confirm if your environment variable is being set, just open a DOS
box and type the command SET. It will list all the environment variables
that are set and you can see their values.

Lambert

> -----Original Message-----
> From:	Christopher Hawkins [SMTP:clh at christopherhawkins.com]
> Sent:	Friday, November 21, 2003 12:58 PM
> To:	accessd at databaseadvisors.com
> Subject:	[AccessD] OT: Broken API Call in WinXP:
> GetEnvironmentVariable?
> 
> I have inherited an application that uses the GetEnvironmentVariable
> API to identify a machine for purposes of authenticating that a
> certain application can be accessed from that machine.  For those
> unfamiliar, here's the code that makes this call:
> 
> ***START***
> Declare Function GetEnvironmentVariable Lib "kernel32" Alias
> "GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As
> String, ByVal nSize As Long) As Long
> 
> 
> Private Function GetClientName() As String
> 
> Dim strBuffer As String
> Dim iLenBuffer As Integer
> Dim retval As Integer
> 
> On Error GoTo Err_GetClientName
> 
>     strBuffer = Space(255)
>     iLenBuffer = 255
> 
>     retval = GetEnvironmentVariable("CLIENTNAME", strBuffer,
> iLenBuffer)
>     If Len(Trim(strBuffer)) <> 0 Then
>     	strBuffer = Left(strBuffer, Len(Trim(strBuffer)) - 1)
>     Else
>         ' probably no client name
>         strBuffer = ""
>     End If
>     
> Exit_GetClientName:
>     Exit Function
> 
> Err_GetClientName:
>         MsgBox Err.Description, , "Error in Function
> modUtil.GetClientName"
>         Resume Exit_GetClientName
>     Resume 0    ' .FOR TROUBLESHOOTING
> End Function
> ***END***
> 
> This has been working like a charm on Windows98 machines.  We add the
> following line to AutoExec.bat:
> 
> "SET CLIENTNAME=FOOBAR"
> 
> And the API call returns the string "FOOBAR", every time without fail.
> 
> Now my client is migrating all their machines to XP.  Unfortunately,
> this same API call returns an empty string, or sometimes the string
> "Console".
> 
> "OK," I think to myself. "XP doesn't really use AutoExec.bat, it uses
> AutoExec.NT.  I'll set the ClientName in that file instead!  But that
> does not work either.
> 
> IThe fact that XP will return the string "Console" every so often
> made me think " Aha!  On XP this API call is looking in the registry,
> not in a .bat file".  So I searched the registry for every place
> where the string "Console" existed, and one by one replaced them with
> "FOOBAR" and re-ran the code.  I still got nothing.  If it was
> returning "Console" before, it returned "Console" again.  if it
> returned empty string before, it returned empty string again.
> 
> Then I wet to Control Panel > System > Advanced > Environment
> Variables and added a system variable named CLIENTNAME with a value
> of FOOBAR.
> 
> That did not work either, and now I am out of ideas.
> 
> Is there anyone who owns the API to the degree that they can tell me
> where exactly GetEnvironmentVariable is looking to get the value it
> returns?  I am well and truly stumped.
> 
> -Christopher-
> 
> 
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com


More information about the AccessD mailing list