diff --git a/Source/CTest/cmCTestCoverageHandler.cxx b/Source/CTest/cmCTestCoverageHandler.cxx
index 6369e173ff40d488bd52e34a6cfa771331ec061b..65599e0adb795e059fbb276933943620903d953d 100644
--- a/Source/CTest/cmCTestCoverageHandler.cxx
+++ b/Source/CTest/cmCTestCoverageHandler.cxx
@@ -1474,7 +1474,12 @@ int cmCTestCoverageHandler::HandleLCovCoverage(
     << std::endl, this->Quiet);
 
   std::vector<std::string> files;
-  this->FindLCovFiles(files);
+  if (!this->FindLCovFiles(files))
+    {
+    cmCTestLog(this->CTest, ERROR_MESSAGE,
+               "Error while finding LCov files.\n");
+    return 0;
+    }
   std::vector<std::string>::iterator it;
 
   if (files.empty())
@@ -1745,18 +1750,28 @@ void cmCTestCoverageHandler::FindGCovFiles(std::vector<std::string>& files)
 }
 
 //----------------------------------------------------------------------------
-void cmCTestCoverageHandler::FindLCovFiles(std::vector<std::string>& files)
+bool cmCTestCoverageHandler::FindLCovFiles(std::vector<std::string>& files)
 {
   cmsys::Glob gl;
   gl.RecurseOff(); // No need of recurse if -prof_dir${BUILD_DIR} flag is
                    // used while compiling.
   gl.RecurseThroughSymlinksOff();
   std::string prevBinaryDir;
-  cmSystemTools::ChangeDirectory(
-    this->CTest->GetCTestConfiguration("BuildDirectory"));
+  std::string buildDir = this->CTest->GetCTestConfiguration("BuildDirectory");
+  if (cmSystemTools::ChangeDirectory(buildDir))
+    {
+    cmCTestLog(this->CTest, ERROR_MESSAGE,
+               "Error changing directory to " << buildDir << std::endl);
+    return false;
+    }
 
   // Run profmerge to merge all *.dyn files into dpi files
-  cmSystemTools::RunSingleCommand("profmerge");
+  if (!cmSystemTools::RunSingleCommand("profmerge"))
+    {
+    cmCTestLog(this->CTest, ERROR_MESSAGE,
+               "Error while running profmerge.\n");
+    return false;
+    }
 
   prevBinaryDir = cmSystemTools::GetCurrentWorkingDirectory().c_str();
 
@@ -1766,10 +1781,16 @@ void cmCTestCoverageHandler::FindLCovFiles(std::vector<std::string>& files)
   daGlob += "/*.dpi";
   cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
     "   looking for dpi files in: " << daGlob << std::endl, this->Quiet);
-  gl.FindFiles(daGlob);
+  if (!gl.FindFiles(daGlob))
+    {
+    cmCTestLog(this->CTest, ERROR_MESSAGE,
+               "Error while finding files matching " << daGlob << std::endl);
+    return false;
+    }
   files.insert(files.end(), gl.GetFiles().begin(), gl.GetFiles().end());
   cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
     "Now searching in: " << daGlob << std::endl, this->Quiet);
+  return true;
 }
 
 //----------------------------------------------------------------------
diff --git a/Source/CTest/cmCTestCoverageHandler.h b/Source/CTest/cmCTestCoverageHandler.h
index 2ca123a202fdae3da6291864f43618f855d02c31..7102d1e671ecff9e34608c3c1de80af6b92c4ffb 100644
--- a/Source/CTest/cmCTestCoverageHandler.h
+++ b/Source/CTest/cmCTestCoverageHandler.h
@@ -75,7 +75,7 @@ private:
 
   //! Handle coverage using Intel's LCov
   int HandleLCovCoverage(cmCTestCoverageHandlerContainer* cont);
-  void FindLCovFiles(std::vector<std::string>& files);
+  bool FindLCovFiles(std::vector<std::string>& files);
 
   //! Handle coverage using xdebug php coverage
   int HandlePHPCoverage(cmCTestCoverageHandlerContainer* cont);
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx
index 71f47f33fc61e4c5ce4bc5b9df26fb01e7a74470..7bee0ea94cd2e82688bec95647418817b3f3afbf 100644
--- a/Source/cmcmd.cxx
+++ b/Source/cmcmd.cxx
@@ -1468,18 +1468,24 @@ bool cmcmd::RunCommand(const char* comment,
   std::string output;
   int retCode =0;
   // use rc command to create .res file
-  cmSystemTools::RunSingleCommand(command,
-                                  &output, &output,
-                                  &retCode, 0, cmSystemTools::OUTPUT_NONE);
+  bool res = cmSystemTools::RunSingleCommand(command,
+                                             &output, &output,
+                                             &retCode, 0,
+                                             cmSystemTools::OUTPUT_NONE);
   // always print the output of the command, unless
   // it is the dumb rc command banner, but if the command
   // returned an error code then print the output anyway as
   // the banner may be mixed with some other important information.
   if(output.find("Resource Compiler Version") == output.npos
-     || retCode !=0)
+     || !res || retCode)
     {
     std::cout << output;
     }
+  if (!res)
+    {
+    std::cout << comment << " failed to run." << std::endl;
+    return false;
+    }
   // if retCodeOut is requested then always return true
   // and set the retCodeOut to retCode
   if(retCodeOut)
@@ -1593,7 +1599,10 @@ int cmcmd::VisualStudioLinkIncremental(std::vector<std::string>& args,
   mtCommand.push_back(tempManifest);
   //  now run mt.exe to create the final manifest file
   int mtRet =0;
-  cmcmd::RunCommand("MT", mtCommand, verbose, &mtRet);
+  if(!cmcmd::RunCommand("MT", mtCommand, verbose, &mtRet))
+    {
+    return -1;
+    }
   // if mt returns 0, then the manifest was not changed and
   // we do not need to do another link step
   if(mtRet == 0)