diff --git a/util/texi2dvi b/util/texi2dvi
index 9de353743c..8243579e43 100755
--- a/util/texi2dvi
+++ b/util/texi2dvi
@@ -81,12 +81,20 @@ IFS="$space$tab$newline"
 
 if test -n "$COMSPEC$ComSpec" \
    && uname | $EGREP -iv 'cygwin|msys' >/dev/null \
-   && test "$OSTYPE" != msys ; then
+   && test "$OSTYPE" != msys \
+   && test "$OSTYPE" != cygwin ; then
   path_sep=";"
 else
   path_sep=":"
 fi
 
+exe_ext=''
+case `uname -r` in
+  *-microsoft-standard-WSL2)
+    need_exe_ext=true;;
+  *)
+    need_exe_ext=false;;
+esac
 
 # Pacify verbose cds.
 CDPATH=${ZSH_VERSION+.}$path_sep
@@ -324,6 +332,7 @@ error ()
 findprog ()
 {
   saveIFS="$IFS"
+  exe_ext=''
   IFS=$path_sep  # break path components at the path separator
   for dir in $PATH; do
     IFS=$saveIFS
@@ -336,8 +345,12 @@ findprog ()
     # design decisions, so there is little chance to make them consistent.)
     # Thusly, it seems to be difficult to make use of these enhancements.
     #
-    if   { test -f "$dir/$1"     && test -x "$dir/$1"; } \
-      || { test -f "$dir/$1.exe" && test -x "$dir/$1.exe"; }; then
+    if { test -f "$dir/$1"     && test -x "$dir/$1"; }; then
+      return 0
+    elif { test -f "$dir/$1.exe" && test -x "$dir/$1.exe"; }; then
+      if $need_exe_ext; then
+	exe_ext='.exe'
+      fi
       return 0
     fi
   done
@@ -1009,7 +1022,7 @@ run_dvipdf ()
   elif test -z "$dvipdf"; then
     for i in dvipdfmx dvipdfm dvipdf dvi2pdf dvitopdf; do
       if findprog $i; then
-        dvipdf=$i
+        dvipdf=${i}$exe_ext
       fi
     done
   fi
@@ -1669,19 +1682,36 @@ or do a web search for TeX and your operating system or distro.
 EOM
     exit 1
   fi
-
+  tex_prog='tex'$exe_ext
   # We want to use etex (or pdftex) if they are available, and the user
   # didn't explicitly specify.  We don't check for elatex and pdfelatex
   # because (as of 2003), the LaTeX team has asked that new distributions
   # use etex by default anyway.
   #
-  if findprog etex; then TEX=etex; else TEX=tex; fi
+  if findprog etex; then TEX='etex'$exe_ext; else TEX=$tex_prog; fi
+  unset tex_prog
 fi
 
 # For many years, the pdftex binary has included the e-tex extensions,
 # but for those people with ancient TeX distributions ...
 if test -z "$PDFTEX"; then
-  if findprog pdfetex; then PDFTEX=pdfetex; else PDFTEX=pdftex; fi
+  if findprog pdfetex; then PDFTEX=pdfetex$exe_ext; else
+    if findprog pdftex; then
+      PDFTEX=pdftex$exe_ext;
+    else
+      cat <<EOM >&2
+You don't have a working TeX binary (pdftex) installed anywhere in
+your PATH, and texi2dvi cannot proceed without one.  If you want to use
+this script, you'll need to install TeX (if you don't have it) or change
+your PATH or TEX environment variable (if you do).  See the --help
+output for more details.
+
+For information about obtaining TeX, please see http://tug.org/texlive,
+or do a web search for TeX and your operating system or distro.
+EOM
+      exit 1
+    fi
+  fi
 fi
 
 
