diff --git a/wlauto/utils/misc.py b/wlauto/utils/misc.py
index 279667ca..af9b7e5e 100644
--- a/wlauto/utils/misc.py
+++ b/wlauto/utils/misc.py
@@ -701,3 +701,16 @@ def unique(alist):
         if item not in result:
             result.append(item)
     return result
+
+
+def open_file(filepath):
+    """
+    Open the specified file path with the associated launcher in an OS-agnostic way.
+
+    """
+    if os.name == 'nt':  # Windows
+        return os.startfile(filepath)  # pylint: disable=no-member
+    elif sys.platform == 'darwin':  # Mac OSX
+        return subprocess.call(['open', filepath])
+    else:  # assume Linux or similar running a freedesktop-compliant GUI
+        return subprocess.call(['xdg-open', filepath])