Notes on Win32.
===============

$LastChangedDate$

Contents:
=========

  Some Known Issues
  Troubleshooting


Some Known Issues:
==================

  Some of the following issues come up from time to time:

  * Problems with Apache and mod_dav_svn.so and mod_authz_svn.so:

    Some people are getting into trouble when starting to use
    Apache with mod_dav_svn.so and mod_authz_svn.so. Here are some possible
    solutions (you may need to try one or more of them):

    - Apache 2 outputs startup errors in the Event Viewer's Application log,
      so check the details of the error there. The following error:
          The Apache service named reported the following error:
          >>> Cannot load <install path>/Apache2/modules/mod_dav_svn.so
          into server: The specified module could not be found."
      means you need to copy the libdb42.dll and the intl.dll from the
      Subversion folder to your Apache\bin or Apache\modules folder.
    - Make sure that the Subversion Path is included in the systems %PATH%
      environment.
    - Make sure that your entries in httpd.conf are correct and remember that
      mod_dav_svn.so and mod_authz_svn.so should be loaded after the other
      mod_dav*.so modules.
    - Uninstall the Apache service manually by typing:
        apache -k uninstall
      Then check your httpd.conf and reinstall the service by typing:
        apache -k install

  * If your svn.exe won't run then you can try to download shfolder.dll from
    here:

      http://download.microsoft.com/download/platformsdk/Redist/5.50.4027.300/W9XNT4/EN-US/shfinst.EXE

  * Checklist for Win9x and Millenium users:

    - Make sure that the subversion path is included in your system %PATH%
      environment variable in Autoexec.bat.
    - This line must be in your Autoexec.bat file (adjust the path so it fits
      your system) if it's not there:
        SET APR_ICONV_PATH="C:\Program Files\Subversion\iconv"
      The installer will take care of this in a near future.
    - Remember that you must restart Windows if your Autoexec.bat file
      has changed.



Troubleshooting:
================

  You have some options when you get into trouble. Please, try one or more of
  the following items:

  * The "Some Known Issues" section above
  * The Subversion FAQ:
      http://subversion.tigris.org/project_faq.html
  * The documentation included with this distribution
  * Get help (search and/or subscribe) from the various mailing lists at the
    subversion site. You will find info about this here:
      http://subversion.tigris.org/servlets/ProjectMailingListList
