控制台应用程序在启动时执行时无法创建子进程

时间:2019-05-21 17:19:01

标签: winapi

基本上,我有一个控制台应用程序,可以打开另一个.exe。通常我双击该控制台应用程序即可正常工作。

我在regedit中添加了该应用程序:Computer \ HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Run,以便它随Windows自动打开,并且该.exe自动运行。

我不知道如何解决此问题。

#include <windows.h>
#include <shellapi.h>
#include <iostream>

using namespace std;

int main()
{
    cout << "Test...\n";
    Sleep(500);
    cout << "Test..\n";
    ShellExecuteA(NULL, "open", "Manager.exe", NULL, NULL, SW_SHOWNORMAL);
    cout << "Test....\n";
    Sleep(500);
    return 0;
}

问题是控制台会在Windows启动时打开,但不会打开.exe文件,只是基本上可以打开和关闭。就像绕过“ ShellExecuteA” ...行,在控制台上显示文本,然后Sleep(...)起作用。

注意:请记住,如上所述,当我手动打开此应用程序时,它可以正常工作,“ Manager.exe”将打开。但是,当Windows自动打开此代码时,它不起作用。有帮助吗?

1 个答案:

答案 0 :(得分:3)

使用Run键执行的应用程序的工作目录是实现的详细信息,您没有指定Manager.exe的路径,因此ShellExecuteA找不到文件。

指定Manager.exe的完整路径。如果您需要控制台应用程序的路径,则可以调用GetModuleFileName(NULL, ...)

Windows并未绕过您对ShellExecuteA的调用,它可能会因未找到错误而失败,但是您不知道,因为您没有检查返回值!