Index: wp-admin/includes/plugin.php
===================================================================
--- wp-admin/includes/plugin.php	(revision 8772)
+++ wp-admin/includes/plugin.php	(working copy)
@@ -199,6 +199,7 @@
 		$plugins = array($plugins);
 
 	foreach ( $plugins as $plugin ) {
+		$plugin = plugin_basename($plugin);
 		if( ! is_plugin_active($plugin) )
 			continue;
 		array_splice($current, array_search( $plugin, $current), 1 ); // Fixed Array-fu!
Index: wp-admin/plugins.php
===================================================================
--- wp-admin/plugins.php	(revision 8772)
+++ wp-admin/plugins.php	(working copy)
@@ -59,7 +59,9 @@
 				wp_die($valid);
 			error_reporting( E_ALL ^ E_NOTICE );
 			@ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
-			include(WP_PLUGIN_DIR . '/' . $plugin);
+			$result = activate_plugin($plugin, false);
+			if ( is_wp_error( $result ) )
+				die( $result->get_error_message() );
 			exit;
 			break;
 		case 'deactivate':
