How to debug PAC (proxy auto config) on Windows 8.1 (IE11 and Modern UI)

pacwindows 8windows-8.1

On older systems such as Windows 7 + IE10, calling "alert()" in the PAC file would cause a dialog being shown. However, with Windows 8.1 no dialogs are displayed even if IE11 seems to be making use the PAC.

My current situation is IE11 can use the (SOCKS) proxies (returned by the PAC) just fine, but Modern UI apps are completely disconnected from Internet. It seems IE11 and Modern UI treat the PAC setting differently but I cannot find a way to debug it.

In summary, my questions are

  1. How can I debug the PAC with IE11 on Windows 8.1?
  2. How can I debug the PAC with Modern UI on Windows 8.1?

Best Answer

IE11 PAC-file changes

There were changes made by Microsoft to how IE11 handles local PAC files. You can read about them here or see below for some quick info.

Also note, that alert() statements no longer work as of Windows 8.


With IE11, the usage of a PAC-file through the file-protocol is no more possible, unless you add the following registry-key:

[HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings]
(DWORD)"EnableLegacyAutoProxyFeatures"=1

PAC-file through file-protocol example

Note: alert-statements will no more appear when using Windows 8 or higher!


DEBUG PAC File with AUTOPROX (Download Link)

Sometimes you need just to test your PAC-file, if the expected route is returned, although you have no access to the website in question. For such testing you can use the (attached) command line-utility tool autoprox.exe, created by Pierre-Louis Coll.

When starting it in a CMD without additional parameter the usage is displayed:

C:\temp>autoprox
Version : 2.1.0.0
Written by pierrelc@microsoft.com
Usage : AUTOPROX -s  (calling DetectAutoProxyUrl and saving wpad.dat file in temporary file)
Usage : AUTOPROX  [-h] url [Path to autoproxy file]
       -h: calls InternetInitializeAutoProxyDll with helper functions implemented in AUTOPROX
AUTOPROX url: calling DetectAutoProxyUrl and using WPAD.DAT logic to find the proxy for the url
AUTOPROX url path: using the autoproxy file from the path to find proxy for the url
Example: autoprox -s
Example: autoprox http://www.microsoft.com
Example: autoprox -h http://www.microsoft.com c:\inetpub\wwwroot\wpad.dat
Example: autoprox http://www.microsoft.com http://proxy/wpad.dat

Here is the output with our sample:

C:\temp>autoprox http://us.msn.com c:\temp\sample.pac
The Winsock 2.2 dll was found okay
url: http://us.msn.com
autoproxy file path is : c:\temp\sample.pac
Calling InternetInitializeAutoProxyDll with c:\temp\sample.pac
        Calling InternetGetProxyInfo with url http://us.msn.com and host us.msn.com
        Proxy returned for url http://us.msn.com is:
PROXY myproxy:80;

When you want to see which DNS-related functions have been called, you can use the parameter “-h” in addition: Here the output, when this is used:

C:\temp>autoprox -h http://us.msn.com c:\temp\sample.pac
The Winsock 2.2 dll was found okay
Will call InternetInitializeAutoProxyDll with helper functions
url: http://us.msn.com
autoproxy file path is : c:\temp\sample.pac
Calling InternetInitializeAutoProxyDll with c:\temp\sample.pac
        Calling InternetGetProxyInfo with url http://us.msn.com and host us.msn.com
ResolveHostByName called with lpszHostName: us.msn.com
ResolveHostByName returning lpszIPAddress: 65.55.206.229
        Proxy returned for url http://us.msn.com is:
PROXY myproxy:80;

Error-Handling in autoprox.exe:

  1. When you specify a non-existing PAC-file (e.g. typo in the command-line), the result from autoprox.exe will be:

    ERROR: InternetInitializeAutoProxyDll failed with error number 0x6 6.

  2. When the Pac-file contains syntax-errors, you typically receive the following message displayed:

    ERROR: InternetGetProxyInfo failed with error number 0x3eb 1003.

After finishing the local test, the PAC-file should be copied to the webserver where it will be accessed through http-protocol.