diff --git a/packages/create-react-app/index.js b/packages/create-react-app/index.js
index 23d8b5e8dea1daeaec0940ee8c97046c57a7f216..403e89edfea26dec8f6e264dbba7162bbd10e832 100644
--- a/packages/create-react-app/index.js
+++ b/packages/create-react-app/index.js
@@ -108,37 +108,48 @@ function createApp(name, verbose, version) {
 }
 
 function install(packageToInstall, verbose, callback) {
-  var args = [
+  function fallbackToNpm() {
+    var npmArgs = [
+      'install',
+      verbose && '--verbose',
+      '--save-dev',
+      '--save-exact',
+      packageToInstall,
+    ].filter(function(e) { return e; });
+    var npmProc = spawn('npm', npmArgs, {stdio: 'inherit'});
+    npmProc.on('close', function (code) {
+      callback(code, 'npm', npmArgs);
+    });
+  }
+
+  var yarnArgs = [
     'add',
     '--dev',
     '--exact',
     packageToInstall,
   ];
-  var proc = spawn('yarn', args, {stdio: 'inherit'});
-
+  var yarnProc;
   var yarnExists = true;
-  proc.on('error', function (err) {
+  try {
+    yarnProc = spawn('yarn', yarnArgs, {stdio: 'inherit'});
+  } catch (err) {
+    // It's not clear why we end up here in some cases but we need this.
+    // https://github.com/facebookincubator/create-react-app/issues/1200
+    yarnExists = false;
+    fallbackToNpm();
+    return;
+  }
+  yarnProc.on('error', function (err) {
     if (err.code === 'ENOENT') {
       yarnExists = false;
     }
   });
-  proc.on('close', function (code) {
+  yarnProc.on('close', function (code) {
     if (yarnExists) {
-      callback(code, 'yarn', args);
-      return;
+      callback(code, 'yarn', yarnArgs);
+    } else {
+      fallbackToNpm();
     }
-    // No Yarn installed, continuing with npm.
-    args = [
-      'install',
-      verbose && '--verbose',
-      '--save-dev',
-      '--save-exact',
-      packageToInstall,
-    ].filter(function(e) { return e; });
-    var npmProc = spawn('npm', args, {stdio: 'inherit'});
-    npmProc.on('close', function (code) {
-      callback(code, 'npm', args);
-    });
   });
 }