【发布时间】:2021-05-08 06:28:11
【问题描述】:
我一直在尝试从 Win32 应用程序启动 exe 文件,但是我无法让它工作。我也想向它传递一个论点,但我认为我做的不正确。之前在这里问过类似的问题,但似乎他们想运行命令(cmd.exe),而不是启动另一个 exe 文件。具体来说,我想启动 Java appletviewer。
我当前的代码是这样的:
LPCWSTR pszViewerPath = L"C:\\Path\\to\\appletviewer.exe"; // I know that this path is correct
PWSTR pszFilePath;
// get the path to the HTML file to pass to appletviewer.exe, store it in pszFilePath...
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
CreateProcess(pszViewerPath,
pszFilePath,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
我遇到的问题是命令提示符窗口短暂出现,然后消失得无影无踪。
我做错了什么?我原本打算使用ShellExcecute,但读到那效率很低。
我该如何解决这个问题?感谢您的帮助。
【问题讨论】:
-
您不检查错误。从修复它开始。文档告诉你怎么做。
-
"命令提示符窗口短暂出现" - 这是您运行控制台应用程序时完全正常的行为..."在消失之前" - ...因为应用程序没有等待任何用户输入的请求。
-
如果你使用
LPCWSTR,你应该将它初始化为LPCWSTR pszViewerPath = L"C:\\Path\\to\\appletviewer.exe";。并确保调用CreateProcessW函数。而你用pszFilePath好像是错的,参数表示要执行的命令行,而你没有初始化。参考:CreateProcessW function
标签: winapi createprocess