This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Environmen t Var Prob lems with Perl - imp act on Win 32::OLE‏


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]