我已经阅读了几篇关于在c ++中运行命令行的帖子,但是没有一篇文章符合我的要求:当我使用dll文件时,没有在外部应用程序中显示控制台。
我的问题:我想使用从数据库中挑选文件的进程。例如:要获取文件XYZ.xyz并将其复制到目录MyDirXYZ,我会使用命令行 " MyDataGenerator XYZ.xyz C:\ MyDirXYZ"。
我使用Visual Studio 让我们通过以下示例来澄清问题,我正在尝试使用" mkdir"创建一个目录。在C ++中,不使用CreateDirectory:
第一种方法:
std::string lDirectory("c:\\MyDummyDir")
std::string lCmd("mkdir " + lDirectory);
system((lCmd).c_str());
当我在Excel上使用dllfile运行它时,它会工作,但会显示控制台。
第二种方法(convertToRightFormat()将char转换为TChar)
std::string lDirectory("c:\\MyDummyDir")
std::string lCmd("mkdir " + lDirectory);
BOOL _status = TRUE;
DWORD _reply, _code;
STARTUPINFO _si = { sizeof(_si) };
PROCESS_INFORMATION _pi;
TCHAR *_cmd = NULL;
_cmd=convertToRightFormat(lCmd.c_str())
_status &= CreateProcess(NULL, _cmd, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &_si, &_pi);
此方法不起作用(甚至不创建文件夹),显然它不适用于进程" MyDataGenerator"。
我尝试使用可执行文件MKDIR.EXE并将其放在命令行中。在这种情况下,它可以工作,但仍然不适用于MyDataGenerator。
是否存在使所有命令行都可以工作的通用,而不显示控制台?
谢谢你。
答案 0 :(得分:0)
#include <Windows.h> // FreeConsole, system
int main(int argc, char* argv[])
{
system("mkdir newdirectoryname");
FreeConsole();
}
这会导致cmd弹出一瞬间。之后关闭。
如果这是不可接受的,只需定位Windows子系统而不是控制台子系统,并确保不绘制窗口。