Environment Var Problems with Perl - impact on Win32::OLE‏

Chris Day chris_day_service@hotmail.co.uk
Tue Jan 24 11:50:00 GMT 2012


Hi All,

In attempting to move some perl (5.10.1-3) code from a Windows XP (Cygwin 1.7.9) environment to a Windows Server 2008 R2 (Cygwin 1.7.9 with perl 5.10.1-3) I seem to have discovered a problem with Cygwin/Perl not resolving most Microsoft environment strings.

For example, running the following from a Cygwin bash shell (or seemingly any Cygwin shell) on any of the XP, Windows 7 and Server 2008 2 machines I have:

bash$ perl -e "use Win32; print Win32::ExpandEnvironmentStrings('%OS%')"
all give
%OS%

While running this from cmd.exe:

C:\cygwin\bin>perl -e "use Win32; print Win32::ExpandEnvironmentStrings('%OS%')"
gives the correct answer of
Windows_NT

This problem seems to exist for all environment variables I have tried, strangely apart from %PATH%. I am not sure if this is a Perl or Cygwin issue. I have tried a newer version of Perl with the same results.

This problem resolving environment variables really shows up when using attempting to use certain COM libraries on Windows7 or Windows Server (I guess with Vista also), as in these OS Microsoft has started to use environment variables in the registry paths of lots of their libraries, whilst they did not do this with XP.

I think it is for this reason people have been experiencing problems with ADODO and other COM functions using Win32::OLE.

For example, the ADODO.Connection registry key on Windows 7 (HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{00000514-0000-0010-8000-00AA006D2EA4}) has library path as %CommonProgramFiles(x86)%\System\ado\msado15.dll while under XP the ADODO.Connection registry key has its library as C:\Program Files (x86)\Common Files\System\ado\msado15.dll.

On my Windows 7 machine, I have tried changing the directory path to from %CommonProgramFiles(x86)% to C:\Program Files (x86)\Common Files in the aforementioned registry key and now Win32::OLE->new('ADODB.Connection') works, albeit opening a DB connection would require a whole host of other similar registry changes (I do not recommend this, I just did it as a test).

I am hoping that someone knows how to fix this or knows a workaround?

Best regards,

Chris. 	 		 	   		  

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list