PRB: CreateProcess() of Windows-Based Application Fails

ID: Q127860

The information in this article applies to:

SYMPTOMS

When you spawn a 16-bit Windows-based application using CreateProcess() where neither lpApplicationName and lpCommandLine are NULL, WOW gives a popup saying:

   Cannot find file (or one of its components). Check to ensure the path
   and filename are correct and that all required libraries are available.

CAUSE

NTVDM expects the first token in the command line (lpCommandLine) to be the program name, although the Win32 subsystem does not. The current design will not be changed.

RESOLUTION

Make lpApplicationName NULL and put the full command line in lpCommandLine.

STATUS

This behavior is by design.

MORE INFORMATION

The documentation for CreateProcess() states:

   If the process to be created is an MS-DOS-based or Windows-based
   application, lpCommandLine should be a full command line in which
   the first element is the application name.

In this case (lpApplicationName is not NULL), lpCommandLine not only should be a full command line, but it must be a full command line.

If the 16-bit application resides on a UNC share and you are not willing to pass NULL for lpApplicationName, you must specify a fully-qualified path for lpApplicationName. An attempt to use a relative path for lpApplicationName still fails with the error listed at the beginning of this article.

Additional query words:

Keywords          : kbSDKPlatform kbSDKWin32 
Issue type        : kbprb

Last Reviewed: October 13, 1998