Update of /cvsroot/python/distutils/misc In directory usw-pr-cvs1:/tmp/cvs-serv3730 Modified Files: install.c Log Message: Better error handling. Now requires admin rights for installation and uninstallation, previously it was possible do this without admin rights, but changing the registry could fail without proper permissions. Index: install.c =================================================================== RCS file: /cvsroot/python/distutils/misc/install.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** install.c 15 Oct 2002 15:11:45 -0000 1.18 --- install.c 15 Oct 2002 19:41:24 -0000 1.19 *************** *** 1322,1326 **** } ! static void OpenLogfile(char *dir) { char buffer[_MAX_PATH+1]; --- 1322,1326 ---- } ! static BOOL OpenLogfile(char *dir) { char buffer[_MAX_PATH+1]; *************** *** 1329,1336 **** --- 1329,1355 ---- long result; HKEY hKey, hSubkey; + char subkey_name[256]; static char KeyName[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; DWORD disposition; + result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, + KeyName, + 0, + KEY_CREATE_SUB_KEY, + &hKey); + if (result != ERROR_SUCCESS) { + if (result == ERROR_ACCESS_DENIED) { + MessageBox(GetFocus(), + "You do not seem to have sufficient access rights\n" + "on this machine to install this software", + NULL, + MB_OK | MB_ICONSTOP); + return FALSE; + } else { + MessageBox(GetFocus(), KeyName, "Could not open key", MB_OK); + } + } + sprintf(buffer, "%s\\%s-wininst.log", dir, meta_name); logfile = fopen(buffer, "a"); *************** *** 1343,1360 **** fprintf(logfile, "Source: %s\n", modulename); ! result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ! KeyName, ! 0, ! KEY_ALL_ACCESS, ! &hKey); ! ! if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), "Could not open key", KeyName, MB_OK); ! ! sprintf(buffer, "%s-py%d.%d", meta_name, py_major, py_minor); ! result = RegCreateKeyEx(hKey, buffer, 0, NULL, 0, ! KEY_ALL_ACCESS, NULL, &hSubkey, --- 1362,1370 ---- fprintf(logfile, "Source: %s\n", modulename); ! sprintf(subkey_name, "%s-py%d.%d", meta_name, py_major, py_minor); ! result = RegCreateKeyEx(hKey, subkey_name, 0, NULL, 0, ! KEY_WRITE, NULL, &hSubkey, *************** *** 1362,1382 **** if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), "Could not create key", buffer, MB_OK); RegCloseKey(hKey); if (disposition == REG_CREATED_NEW_KEY) ! fprintf(logfile, "020 Reg DB Key: [%s]%s\n", KeyName, buffer); sprintf(buffer, "Python %d.%d %s", py_major, py_minor, title); ! RegSetValueEx(hSubkey, "DisplayName", ! 0, ! REG_SZ, ! buffer, ! strlen(buffer)+1); ! fprintf(logfile, "040 Reg DB Value: [%s]%s=%s\n", ! KeyName, "DisplayName", buffer); { --- 1372,1395 ---- if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), subkey_name, "Could not create key", MB_OK); RegCloseKey(hKey); if (disposition == REG_CREATED_NEW_KEY) ! fprintf(logfile, "020 Reg DB Key: [%s]%s\n", KeyName, subkey_name); sprintf(buffer, "Python %d.%d %s", py_major, py_minor, title); ! result = RegSetValueEx(hSubkey, "DisplayName", ! 0, ! REG_SZ, ! buffer, ! strlen(buffer)+1); ! if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), buffer, "Could not set key value", MB_OK); ! ! fprintf(logfile, "040 Reg DB Value: [%s\\%s]%s=%s\n", ! KeyName, subkey_name, "DisplayName", buffer); { *************** *** 1390,1402 **** dir, meta_name, dir, meta_name); ! RegSetValueEx(hSubkey, "UninstallString", ! 0, ! REG_SZ, ! buffer, ! strlen(buffer)+1); ! fprintf(logfile, "040 Reg DB Value: [%s]%s=%s\n", ! KeyName, "UninstallString", buffer); } } --- 1403,1419 ---- dir, meta_name, dir, meta_name); ! result = RegSetValueEx(hSubkey, "UninstallString", ! 0, ! REG_SZ, ! buffer, ! strlen(buffer)+1); ! if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), buffer, "Could not set key value", MB_OK); ! ! fprintf(logfile, "040 Reg DB Value: [%s\\%s]%s=%s\n", ! KeyName, subkey_name, "UninstallString", buffer); } + return TRUE; } *************** *** 1473,1477 **** python_dir[strlen(python_dir)-1] = '\0'; ! OpenLogfile(python_dir); /* --- 1490,1495 ---- python_dir[strlen(python_dir)-1] = '\0'; ! if (!OpenLogfile(python_dir)) ! break; /* *************** *** 1812,1816 **** } ! void DeleteRegistryKey(char *line) { char *keyname; --- 1830,1834 ---- } ! void DeleteRegistryKey(char *string) { char *keyname; *************** *** 1818,1821 **** --- 1836,1843 ---- char *delim; HKEY hKey; + long result; + char *line; + + line = strdup(string); /* so we can change it */ keyname = strchr(line, '['); *************** *** 1832,1846 **** *delim = '\0'; ! RegOpenKeyEx(HKEY_LOCAL_MACHINE, ! keyname, ! 0, ! KEY_ALL_ACCESS, ! &hKey); ! RegDeleteKey(hKey, subkeyname); ! RegCloseKey(hKey); } ! void DeleteRegistryValue(char *line) { char *keyname; --- 1854,1875 ---- *delim = '\0'; ! result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ! keyname, ! 0, ! KEY_WRITE, ! &hKey); ! if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), string, "Could not open key", MB_OK); ! else { ! result = RegDeleteKey(hKey, subkeyname); ! if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), string, "Could not delete key", MB_OK); ! RegCloseKey(hKey); ! } ! free(line); } ! void DeleteRegistryValue(char *string) { char *keyname; *************** *** 1848,1851 **** --- 1877,1885 ---- char *value; HKEY hKey; + long result; + char *line; + + line = strdup(string); /* so we can change it */ + /* Format is 'Reg DB Value: [key]name=value' */ keyname = strchr(line, '['); *************** *** 1863,1874 **** *value++ = '\0'; ! RegOpenKeyEx(HKEY_LOCAL_MACHINE, ! keyname, ! 0, ! KEY_ALL_ACCESS, ! &hKey); ! ! RegDeleteValue(hKey, valuename); ! RegCloseKey(hKey); } --- 1897,1914 ---- *value++ = '\0'; ! result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ! keyname, ! 0, ! KEY_WRITE, ! &hKey); ! if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), string, "Could not open key", MB_OK); ! else { ! result = RegDeleteValue(hKey, valuename); ! if (result != ERROR_SUCCESS) ! MessageBox(GetFocus(), string, "Could not delete value", MB_OK); ! RegCloseKey(hKey); ! } ! free(line); } *************** *** 1980,1983 **** --- 2020,2045 ---- MB_OK); return 1; /* Error */ + } + + { + DWORD result; + HKEY hKey; + static char KeyName[] = + "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; + + result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, + KeyName, + 0, + KEY_CREATE_SUB_KEY, + &hKey); + if (result == ERROR_ACCESS_DENIED) { + MessageBox(GetFocus(), + "You do not seem to have sufficient access rights\n" + "on this machine to uninstall this software", + NULL, + MB_OK | MB_ICONSTOP); + return 1; /* Error */ + } + RegCloseKey(hKey); }
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4