Bluehost.com Web Hosting $6.95

Apache on Vista: cannot find CSIDL_COMMON_APPDATA folder from CGIprogram

This is a discussion on Apache on Vista: cannot find CSIDL_COMMON_APPDATA folder from CGIprogram within the Windows Web Servers forums, part of the Web Server and Related Forums category; I'm cross-posting (or failing that, multiposting) to comp.infosystems.www.servers.ms-windows and comp.os.ms- windows....


Go Back   Usenet Forums > Web Server and Related Forums > Windows Web Servers

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-23-2009
rcopley@gmail.com
 
Posts: n/a
Default Apache on Vista: cannot find CSIDL_COMMON_APPDATA folder from CGIprogram

I'm cross-posting (or failing that, multiposting) to
comp.infosystems.www.servers.ms-windows and comp.os.ms-
windows.programmer.win32, because I don't know whether this is an
issue with the one, the other, or a mixture of both. I can't cross-
post it to the Subversion newsgroup, because there isn't one, but if
this discussion bears fruit I'll summarize it on their wiki.

I have Apache 2.2.11 installed on a stand-alone Windows Vista Ultimate
SP1 system. I have a CGI perl script which calls "svn.exe".

#!c:/strawberry/perl/bin/perl.exe
print "Content-type: text/plain;\n\n\n";
my $status = system "svn --version 2>&1";
print "svn exited with status $status.";

It works okay at the command line but when called as a CGI script, it
shows:
svn: Can't determine the system config path
svn exited with status 256.

The CGI script also works fine on the Windows XP SP3 systems I've
tried (Home and Professional Edition).

After looking at the source code for Subversion (see the function
"svn_config__win_config_path" in "subversion-1.6.1\subversion
\libsvn_subr\config_win.c"), I've reduced the example to this C++
program (it's wordy, but it just calls SHGetFolderPath):

#include <iostream>
#include <ostream>
#include <windows.h>
#include <shlobj.h>
const int SHGFP_TYPE_CURRENT = 0; // Not in my <shlobj.h> for some
reason
int main () {
const int csidl = CSIDL_COMMON_APPDATA;
char folder [MAX_PATH] = { 0 };
unsigned result = SHGetFolderPath (0, csidl, (void *) -1,
SHGFP_TYPE_CURRENT, folder);
std::cout << "Content-type: text/plain;\n\nReturn value 0x" <<
std::hex << result
<< ", path " << folder << '\n';
}

If I run the executable from the command prompt, it prints "Return
value 0x0, path C:\ProgramData", but if I install the executable as a
CGI handler and browse to its URL, I see "Return value 0x80070003,
path ".

This is true no matter whether the command shell is running as a user,
an administrator, or as NT_AUTHORITY\SYSTEM, and whether I run Apache
as the default NT_AUTHORITY\SYSTEM, or in a local user account.

Using SHGFP_TYPE_DEFAULT instead of SHGFP_TYPE_CURRENT as suggested in
the comments in the Subversion source doesn't make a difference
either.

Most other CSIDL_* known-folder ids do seem to work (I haven't tried
them all). But which one would be a better fit?

Passing the error code 0x80070003 to the FormatMessage function, it
appears to mean "The system cannot find the path specified".

Comp.os.ms-windows.programmer.win32 people, do you have any idea what
are the circumstances under which Vista keeps the location of the
COMMON_APPDATA folder secret, and for goodness' sake why, and what
you're supposed to use instead? I'd like to be able to submit a patch
to the people at Subversion project.

Comp.infosystems.www.servers.ms-windows people, can you help me to
understand what is unusual about the way a process is launched to
handle a CGI request, that could lead to this behaviour?

  #2 (permalink)  
Old 04-23-2009
Jaelani
 
Posts: n/a
Default Re: Apache on Vista: cannot find CSIDL_COMMON_APPDATA folder fromCGI program

rcopley@gmail.com wrote:
> I'm cross-posting (or failing that, multiposting) to
> comp.infosystems.www.servers.ms-windows and comp.os.ms-
> windows.programmer.win32, because I don't know whether this is an
> issue with the one, the other, or a mixture of both. I can't cross-
> post it to the Subversion newsgroup, because there isn't one, but if
> this discussion bears fruit I'll summarize it on their wiki.
>
> I have Apache 2.2.11 installed on a stand-alone Windows Vista Ultimate
> SP1 system. I have a CGI perl script which calls "svn.exe".
>
> #!c:/strawberry/perl/bin/perl.exe
> print "Content-type: text/plain;\n\n\n";
> my $status = system "svn --version 2>&1";
> print "svn exited with status $status.";
>
> It works okay at the command line but when called as a CGI script, it
> shows:
> svn: Can't determine the system config path
> svn exited with status 256.
>
> The CGI script also works fine on the Windows XP SP3 systems I've
> tried (Home and Professional Edition).
>
> After looking at the source code for Subversion (see the function
> "svn_config__win_config_path" in "subversion-1.6.1\subversion
> \libsvn_subr\config_win.c"), I've reduced the example to this C++
> program (it's wordy, but it just calls SHGetFolderPath):
>
> #include <iostream>
> #include <ostream>
> #include <windows.h>
> #include <shlobj.h>
> const int SHGFP_TYPE_CURRENT = 0; // Not in my <shlobj.h> for some
> reason
> int main () {
> const int csidl = CSIDL_COMMON_APPDATA;
> char folder [MAX_PATH] = { 0 };
> unsigned result = SHGetFolderPath (0, csidl, (void *) -1,
> SHGFP_TYPE_CURRENT, folder);
> std::cout << "Content-type: text/plain;\n\nReturn value 0x" <<
> std::hex << result
> << ", path " << folder << '\n';
> }
>
> If I run the executable from the command prompt, it prints "Return
> value 0x0, path C:\ProgramData", but if I install the executable as a
> CGI handler and browse to its URL, I see "Return value 0x80070003,
> path ".
>
> This is true no matter whether the command shell is running as a user,
> an administrator, or as NT_AUTHORITY\SYSTEM, and whether I run Apache
> as the default NT_AUTHORITY\SYSTEM, or in a local user account.
>
> Using SHGFP_TYPE_DEFAULT instead of SHGFP_TYPE_CURRENT as suggested in
> the comments in the Subversion source doesn't make a difference
> either.
>
> Most other CSIDL_* known-folder ids do seem to work (I haven't tried
> them all). But which one would be a better fit?
>
> Passing the error code 0x80070003 to the FormatMessage function, it
> appears to mean "The system cannot find the path specified".
>
> Comp.os.ms-windows.programmer.win32 people, do you have any idea what
> are the circumstances under which Vista keeps the location of the
> COMMON_APPDATA folder secret, and for goodness' sake why, and what
> you're supposed to use instead? I'd like to be able to submit a patch
> to the people at Subversion project.
>
> Comp.infosystems.www.servers.ms-windows people, can you help me to
> understand what is unusual about the way a process is launched to
> handle a CGI request, that could lead to this behaviour?


hToken of -1 i for "Default User" which is a template for new user
account, so it's not for the current user nor all users. Try using NULL
instead.

Don't know exactly what's wrong - it should work, but SHGetFolderPath is
considered obsolete in Vista. Try using SHGetKnownFolderPath when only
under Vista or Windows 7.
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT +1. The time now is 03:30 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0