Issue 600952: Installing w/o admin generates key error (original) (raw)
I encountered the following problem when trying to install a package I had generated with distutils (Python 2.2 on Win2k, logged in as a user without adminstrative priveleges):
When the installer was run, it would go through the steps nicely, but towards the end, it generated two errors: "Could not open key Software\Microsoft\Windows\CurrentVersion\Unins tall" "Could not create key dsp-py2.1"
At first I thought the problem might be the result of installing Python as Administrator, and the package as just a user, so I re-installed Python as a user, but I still got the same error. I ran my test on Win2K with both Python 2.1 and 2.2, and I always got the same result.
I tracked the code generating the error to install.c in distutils-1.0.2/misc (see below). I did some digging and it appears that to use KEY_ALL_ACCESS, the code must be running with Administrator privileges. I checked the CVS archives to see if KEY_ALL_ACCESS is still being used, and it is.
I made the following changes to install.c (from Distutils 1.0.2), recompiled, and it works now. 796c796 < KEY_CREATE_SUB_KEY,
KEY_ALL_ACCESS,
806c806 < KEY_WRITE,
KEY_ALL_ACCESS,
1177c1177 < KEY_WRITE,
KEY_ALL_ACCESS,
1208c1208 < KEY_WRITE,
KEY_ALL_ACCESS,
I chose KEY_CREATE_SUB_KEY for the open, since that is the only operation that will be performed on it. For the new key itself, I chose KEY_WRITE, since that was also the minimal operation. While I was at it, I changed the code for deleting the registry key and value to also use the minimal KEY_WRITE. The last two changes allowed the uninstaller to work properly when run as a normal user.