Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

CreateProcess / Command Line Parsing MFC SDI

Posted on 2004-04-02
3
Medium Priority
?
1,013 Views
Last Modified: 2013-11-20
Want to use CreateProcess to launch another MFC SDI application the First Parameter and passing a file path in the second parameter for the launched program to load.  Making the call as follows:

PROCESS_INFORMATION procInfo;
      BOOL processStarted;
      memset(&suInfo, 0, sizeof(suInfo));
      suInfo.cb = sizeof(suInfo);
      // Kick off the Next Program
      processStarted =       
      CreateProcess(
            "C:\\Program Files\\BuildCustomCatalog\\Chass_Header_New\\Chass_Header_New.exe",
            "C:\\CCBuild\\Commands_New\\9778_W_1_4B974338.txt",
            NULL,                              // process security attributes
            NULL,                              // thread security attributes
            FALSE,                              // handle inheritance flag
            NORMAL_PRIORITY_CLASS,                                      // handle inheritance flag
            NULL,                              // pointer to new environment block
            NULL,                              // pointer to current directory name
            &suInfo,                                        // pointer to STARTUPINFO
            &procInfo);                        // pointer to PROCESS_INFORMATION
}

The launched program chokes on this call.  If I execute the CreateProcess call using NULL for parameter 2 (Command Line Argument i.e. pass no command line argument), the launched program has no problem.  The launched program seems to choke at the "if (!ProcessShellCommand(cmdInfo)) return FALSE;" call in the CWinApp InitInstance() function when a file path is included in the command line;

Any ideas would be appreciated.

Thanks,

Julian
0
Comment
Question by:JulianPugh
3 Comments
 
LVL 48

Accepted Solution

by:
AlexFM earned 2000 total points
ID: 10742386
1) Try to run this program (Chass_Header_New.exe) from command prompt with the same parameter - what happens?
2) Both program name and parameter may be in the second CreateProcess parameter:

CreateProcess(
         NULL,
         "C:\\Program Files\\BuildCustomCatalog\\Chass_Header_New\\Chass_Header_New.exe  C:\\CCBuild\\Commands_New\\9778_W_1_4B974338.txt",
         ...


0
 
LVL 30

Expert Comment

by:SteveGTR
ID: 10742552
Does the same thing happen when you specify the command line in your project settings and run the Chass_Header_New.exe from within the developer's studio?

When you say the program chokes what do you mean? Throws an exception? Asserts? Hangs forever?

You are calling ProcessShellCommand() after the following commands:

  // Parse command line for standard shell commands, DDE, file open
  CCommandLineInfo cmdInfo;
  ParseCommandLine(cmdInfo);

And after your document has been setup.

The CWinApp::ProcessShellCommand() routine in APPUI2.CPP has a switch and the following is executed when you pass your parameters:

  case CCommandLineInfo::FileOpen:
    if (!OpenDocumentFile(rCmdInfo.m_strFileName))
      bResult = FALSE;
    break;

Can your document's OpenDocumentFile handle the file name?

Good Luck,
Steve
0
 

Author Comment

by:JulianPugh
ID: 10742560
Alex,

Passed the exe file path and file to load in the second CreateProcess parameter, as you suggested, and everything works perfectly fine.  I really appreciate your help.

thanks,

Julian
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Finishing the grid – keyboard support for arrow keys to manoeuvre, entering the numbers.  The PreTranslateMessage function is to be used to intercept and respond to keyboard events. Continuing from the fourth article about sudoku. …
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
This Micro Tutorial will teach you how to add a cinematic look to any film or video out there. There are very few simple steps that you will follow to do so. This will be demonstrated using Adobe Premiere Pro CS6.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Suggested Courses

971 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question