Troubleshooting: Why isn't my property handler getting indexed?

Having trouble getting your property handler working with the indexer? Here are some troubleshooting tips.

1. Verify that your propdesc file(s) are in a global location

2. Verify that you registered your propdesc file(s) using absolute paths

3. Verify that the event log did not record any failures from registering your propdesc file.

4. Verify that your property description is well formed, accurate, and was registered properly.

5. Verify that your property descriptions are marked isColumn="true", isViewable="true", and isQueryable="true" as appropriate.

6. Verify that your DLL is in a global location (e.g. not under your user profile)

7. Verify that your DLL is registered under HKLM\Software\Classes

8. Verify that your DLL is registered using full paths (or REG_EXPAND_SZ strings that expand to absolute paths using environment variables known by the System account)

9. Verify that your property handler works under explorer

10. We prefer that you use IInitializeWithStream. If you must use IInitializeWithFile or IInitializeWithItem, verify that you specify DisableProcessIsolation

11. Verify that the "Indexing Options" control panel lists your filetype as an indexed filetype

12. Verify that the test file is in an indexed location

13. Verify that the test file's has been modified since after you installed your property handler

Common Mistakes:

1. Placing propdesc files or DLLs under a user directory

2. Registering things with relative paths

3. Registering things under HKCU instead of HKLM (remember that HKCR shows a merged view of the two hives)

4. Forgetting DisableProcessIsolation for non-stream handlers

5. The test file wasn't modified or wasn't in an indexed location

If all else fails, you can use Image File Execution Options to attach a debugger to searchindexer.exe and child processes (On Vista, I use "<pathto>\ntsd.exe -server tcp:port=8001,icfenable -gG -o -snul"; On Win7, I use: "<pathto>\ntsd.exe -server npipe:pipe=foo -gG -o -snul"). Reboot, attach to the debugger, and type "sxeld mypropertyhandler". The debugger will break when your DLL gets loaded. Use of debuggers is an advanced topic that I won't get into right now.