Feedback
diff --git a/tool/grind.dart b/tool/grind.dart
index a7e7fe3..8bca75a 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -312,16 +312,13 @@
 
 @Task('Generate Protobuf classes')
 void generateProtos() async {
-  try {
-    await runWithLogging(
-      'protoc',
-      arguments: ['--dart_out=lib/src', 'protos/dart_services.proto'],
-    );
-  } catch (e) {
-    print('Error running "protoc"; make sure the Protocol Buffer compiler is '
-        'installed (see README.md)');
-    rethrow;
-  }
+  await runWithLogging(
+    'protoc',
+    arguments: ['--dart_out=lib/src', 'protos/dart_services.proto'],
+    onErrorMessage:
+        'Error running "protoc"; make sure the Protocol Buffer compiler is '
+        'installed (see README.md)',
+  );
 
   // reformat generated classes so travis dart format test doesn't fail
   await runWithLogging(
@@ -342,16 +339,25 @@
 Future<void> runWithLogging(String executable,
     {List<String> arguments = const [],
     RunOptions runOptions,
-    String workingDirectory}) async {
+    String workingDirectory,
+    String onErrorMessage}) async {
   runOptions = mergeWorkingDirectory(workingDirectory, runOptions);
   log("$executable ${arguments.join(' ')}");
   runOptions ??= RunOptions();
 
-  final proc = await Process.start(executable, arguments,
-      workingDirectory: runOptions.workingDirectory,
-      environment: runOptions.environment,
-      includeParentEnvironment: runOptions.includeParentEnvironment,
-      runInShell: runOptions.runInShell);
+  Process proc;
+  try {
+    proc = await Process.start(executable, arguments,
+        workingDirectory: runOptions.workingDirectory,
+        environment: runOptions.environment,
+        includeParentEnvironment: runOptions.includeParentEnvironment,
+        runInShell: runOptions.runInShell);
+  } catch (e) {
+    if (onErrorMessage != null) {
+      print(onErrorMessage);
+    }
+    rethrow;
+  }
 
   proc.stdout.listen((out) => log(runOptions.stdoutEncoding.decode(out)));
   proc.stderr.listen((err) => log(runOptions.stdoutEncoding.decode(err)));