我有两个申请。我将它们称为A和B.我可以访问应用程序A的代码。
我想启动应用程序B并在A中打开该应用程序中的文件。我正在使用
实现它的CreateProcess
方法。但是应用程序B没有完全打开。
我不确定这两个应用程序之间是否存在任何常见的dll或其他依赖关系。
我用来打开应用程序B表单A的代码是:
std::wstring appBPath(L"C:\\B.exe");
std::wstring filePath(L"C:\\file.pdf");
std::wstring cmdLineCommand = L"\"" + appBPath+ L"\" \"" + filePath + L"\"";
STARTUPINFO startupInfo;
PROCESS_INFORMATION processInfo;
// set the size of the structures
SecureZeroMemory( &startupInfo, sizeof(startupInfo) );
startupInfo.cb = sizeof(startupInfo);
SecureZeroMemory( &processInfo, sizeof(processInfo) );
CreateProcess( NULL, // No module name (use command line)
&cmdLineCommand[0], // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
CREATE_NEW_CONSOLE, // New process has a new console
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&startupInfo, // Pointer to STARTUPINFO structure
&processInfo ); // Pointer to PROCESS_INFORMATION structure
exe文件开始加载但在初始化期间卡住了。但是,应用程序B没有终止。
它进入一些不一致的状态。此问题仅发生在从其安装程序安装的应用程序A中。
当我运行发布或调试版本时,它不会发生。对于发布和调试版本,我们使用VC10
。但对于安装人员
我们使用VC12
构建。我不确定编译器优化是否适用于安装程序构建。
CreateProcess
函数返回成功。
来自进程资源管理器的应用程序B的线程状态: