基本上,我有一个控制台应用程序,可以打开另一个.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自动打开此代码时,它不起作用。有帮助吗?
答案 0 :(得分:3)
使用Run键执行的应用程序的工作目录是实现的详细信息,您没有指定Manager.exe的路径,因此ShellExecuteA
找不到文件。
指定Manager.exe的完整路径。如果您需要控制台应用程序的路径,则可以调用GetModuleFileName(NULL, ...)
。
Windows并未绕过您对ShellExecuteA
的调用,它可能会因未找到错误而失败,但是您不知道,因为您没有检查返回值!