Thanks,

After discussion with Jan Dubois I've added this code as
Cygwin::sync_winenv() and revised perlcygwin.pod
to use that function when needed.
It will be in the upcoming perl-5.14.2-1 package, which is now in test.

The problem to add that generally is that cygwin-1.7 wants now on
every occurance of non-posix paths.
Initially I thought we should do that unconditionally when loading
Win32.pm or Win32::OLE, but we need some tests before.

On Wed, Feb 8, 2012 at 11:13 AM, Rafael Kitover <rkito...@cpan.org> wrote:
> This is regarding https://rt.cpan.org/Public/Bug/Display.html?id=65052
>
> -------- Original Message --------
> Subject: FW: Environment Var Problems with Perl - impact on Win32::OLE‏
> Date: Mon, 6 Feb 2012 15:51:29 +0000
> From: Chris Day <chris_day_serv...@hotmail.co.uk>
> To: <rkito...@cpan.org>
>
>
> Yep - not sure you will have seen it.
> I seemed to have fixed my own problem (see below) - I am amazed users
> have not come across this before.
> In my opinion, Cygwin has serve limitations under MS OS from Vista
> onwards due to the limited Win32 environment it holds and the use of a
> much more diverse one that appears in the newer OS's registry.
> Regards,
> Chris.
>
> ----------------------------------------
>> From: chris_day_serv...@hotmail.co.uk
>> To: chris_day_serv...@hotmail.co.uk; cyg...@cygwin.com
>> Subject: RE: Environment Var Problems with Perl - impact on Win32::OLEþ
>> Date: Wed, 25 Jan 2012 17:59:22 +0000
>>
>>
>> I seem to have found the problem.
>>
>> It is due to the restricted Win32 environment that exists in Cygwin (see the 
>> bottom of this page http://cygwin.com/cygwin-ug-net/setup-env.html).
>>
>> This restricted environment doesn't include the likes of 
>> %COMMONPROGRAMFILES% that is now used heavily in the registry of newer MS 
>> OSs (major versions > 5 - ie from Vista onwards).
>>
>> It would be great if Cygwin provided an option (say in CYGWIN) to load the 
>> complete current Win32 enviroment at startup - if it does and I have missed 
>> this I would be very inetrested to know.
>>
>> As a simple attempt to work around this I have modified my local copy of the 
>> Win32.xs file in the Perl Win32 module of Jan Dubios to include
>>
>> #include <sys/cygwin.h>
>> XS(w32_SyncCygwinWin32Env){ cygwin_internal (CW_SYNC_WINENV);}
>> newXS("Win32::SyncCygwinWin32Env", w32_SyncCygwinWin32Env, file);
>>
>>
>> then at the very start of my Perl file I have
>>
>> BEGIN { require Win32; Win32::SyncCygwinWin32Env(); }
>>
>>
>> it needs to be at the start and in BEGIN {} so that it runs at complie time 
>> and before any call to the likes of "use Win32::OLE" which need the full 
>> Win32 enviroment.
>>
>> I suspect this is not a very good way of doing this, but if anyone knows a 
>> better solution then please let me know.
>>
>> Thanks,
>>
>> Chris.
>>
>>
>> ----------------------------------------
>> > From: chris_day_serv...@hotmail.co.uk
>> > To: cyg...@cygwin.com
>> > Subject: Environment Var Problems with Perl - impact on Win32::OLEþ
>> > Date: Tue, 24 Jan 2012 11:50:09 +0000
>> >
>> >
>> > 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
>> >
>>
>



-- 
Reini Urban
http://cpanel.net/   http://www.perl-compiler.org/

Reply via email to