diff --git a/imagemagick.module b/imagemagick.module
index c42f3b4..bb11734 100644
--- a/imagemagick.module
+++ b/imagemagick.module
@@ -142,7 +142,7 @@ function _imagemagick_check_path($file) {
 
   // If only the name of the executable is given, we only check whether it is in
   // the path and can be invoked.
-  if ($file != 'convert') {
+  if ($file != 'convert' && $file != 'convert.exe') {
     // Check whether the given file exists.
     if (!is_file($file)) {
       $status['errors'][] = t('The specified ImageMagick file path %file does not exist.', array('%file' => $file));
@@ -415,20 +415,11 @@ function _imagemagick_convert_exec($command_args, &$output = NULL, &$error = NUL
       return FALSE;
     }
   }
+  $command = $convert_path . ' ' . $command_args;
 
   // Use Drupal's root as working directory to resolve relative paths correctly.
   $drupal_path = DRUPAL_ROOT;
 
-  if (strstr($_SERVER['SERVER_SOFTWARE'], 'Win32') || strstr($_SERVER['SERVER_SOFTWARE'], 'IIS')) {
-    // Use Window's start command with the /B flag to make the process run in
-    // the background and avoid a shell command line window from showing up.
-    // @see http://us3.php.net/manual/en/function.exec.php#56599
-    // Use /D to run the command from PHP's current working directory so the
-    // file paths don't have to be absolute.
-    $convert_path = 'start "ImageMagick" /D ' . escapeshellarg($drupal_path) . ' /B ' . escapeshellarg($convert_path);
-  }
-  $command = $convert_path . ' ' . $command_args;
-
   $descriptors = array(
     // stdin
     0 => array('pipe', 'r'),
@@ -437,7 +428,20 @@ function _imagemagick_convert_exec($command_args, &$output = NULL, &$error = NUL
     // stderr
     2 => array('pipe', 'w'),
   );
-  if ($h = proc_open($command, $descriptors, $pipes, $drupal_path)) {
+  $other_options = array(
+    // Earlier versions of ImageMagick used a "start" workaround to prevent a
+    // command line window from popping up in the foreground on Windows servers.
+    // Since PHP 5.2.1, proc_open() supports the 'bypass_shell' option (only
+    // for Windows), which makes PHP open the executable without the cmd.exe
+    // wrapper. A noteworthy impact of skipping cmd.exe is that no shell
+    // environment variables are available. E.g., the path to convert always
+    // needs to be specified on Windows. Internal details about the bypass_shell
+    // option are not documented on php.net, but have been disclosed in a user
+    // comment.
+    // @see http://php.net/manual/en/function.exec.php#101579
+    'bypass_shell' => TRUE,
+  );
+  if ($h = proc_open($command, $descriptors, $pipes, $drupal_path, NULL, $other_options)) {
     $output = '';
     while (!feof($pipes[1])) {
       $output .= fgets($pipes[1]);
