使用加载库( "cmd.exe" ) 但不起作用
Using Loadlibrary("cmd.exe") but not work
众所周知,当我们启动CMD时.exe它会出现一个控制台窗口,并以如下行开头:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:Usershey>
但是当我在 VS 中构建一个 Windows 控制台项目和我的代码时,如下所示:
int _tmain(int argc, _TCHAR* argv[])
{
auto h = LoadLibrary(__TEXT("cmd.exe"));
Sleep(99999);
}
只是变成了一条黑色的 window.no 线!
正如我所期望的那样,我可以在我的进程中加载这个 PE(Windows 可执行文件格式)文件,这样我就不必启动新的 cmd.exe并将其 stdIO 重定向到启动 cmd.exe 的进程。(我知道带有exe文件的加载库可以在调用进程中启动exe而无需创建新进程)为什么加载库不起作用?(控制台窗口中未显示任何单词)
(我知道带有exe文件的加载库可以在调用进程中启动exe而无需创建新进程)
不,不能。
如果使用 LOAD_LIBRARY_AS_DATAFILE
标志,则可以将 EXE 文件的名称传递给LoadLibraryEx
,以便访问其资源,但LoadLibrary
既不会在 EXE 中运行代码,也不会准备要运行的代码。
EXE 的入口点旨在拥有自己的进程。 (我说的是真正的入口点,它通常由语言支持库提供。 它可能有一个名称,例如 wmainCRT
及其地址,而不是用户提供的main()
的地址,出现在 PE 标头中)。 通常它通过调用 ExitProcess()
退出,即使您设法将其映射到内存空间并调用它,也会对您的主机 EXE 产生灾难性影响。
对可动态加载库和可执行文件的入口点的要求非常非常不同。
您无法通过 LoadLibrary 运行可执行文件。请改用 CreateProcess(或其兄弟姐妹之一)。
来自 LoadLibrary 函数文档(粗体突出显示的是我的):
加载库还可用于加载其他可执行模块。例如,该函数可以指定一个.exe文件,以获取可在 FindResource 或 LoadResource 中使用的句柄。但是,不要使用 LoadLibrary 来运行.exe文件。请改用 CreateProcess 函数。
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 程序在CLion IDE中工作,但exe不起作用
- PlayFunction在DLL中不起作用,但在独立的exe中工作
- 通过 WIX 安装程序安装带有 CLI 项目 EXE 的 C# 不起作用
- 获得程序输出(无错误),但程序.exe在使用 graphics.h 时不起作用
- C++发布 exe 不起作用的代码块
- 使用加载库( "cmd.exe" ) 但不起作用
- CPP 文件运行,但在编译为 exe 时不起作用
- Cin 执行不起作用 (程序.exe <文件与数据.txt)
- /fe(名称 EXE 文件)不起作用