通过C 运行外部.exe
run external .exe via c++
我尝试做的事情:请通过另一个C 程序在Windows上启动外部.exe文件(从Fortran汇编)
我尝试了许多不同的版本,例如:
system("C:/IPSE_temp/CEA_schwing.exe");
编译还可以,但是当我执行文件时,他错过了一些库,例如rund32.dll ...
然后,我尝试在不同的变体中使用这种代码(CreateProcess)
std::string rt = "C:/IPSE_temp/CEA_schwing.exe";
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
if (CreateProcess(NULL, (LPWSTR) rt.c_str(), NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo);)
{
WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
因为我也想知道,该程序完成后(程序应等到外部.exe完成工作)。编译还可以,但他从未运行.exe
我希望我在描述中没有任何跳过,我期待着您的帮助。预先感谢
是的,我是新来的C 编程;)
最好的问候
Hanks到Barmak Shemirani,该程序现在正在运行。
不幸的是还有一个其他错误:
我的cea_schwing.exe正在从同一目录中读取文件" single_tp.inp"。这是正常工作的Wenn,我通过Windows Explorer运行Die Exe。
但是,通过通过我的C 程序运行.EXE,他将无法再找到该文件了。有人知道为什么他不再收到文件吗?
rt.c_str()
应该是 CreateProcess()
中的第一个参数。
此外,您正在混合ANSI和Unicode。显然,您正在为Unicode编译,其中CreateProcess()
映射到CreateProcessW()
。std::string
包含char
数据,因此c_str()
返回const char *
指针,但CreateProcessW()
预计wchar_t*
指针。使用(LPWSTR)rt.c_str()
铸造将简单地隐藏编译器错误,但它并不能解决您将Unicode数据的ANSI数据传递到预期的实际问题。
在声明Unicode字符串时使用宽字符串(请注意L
前缀):
std::wstring rt = L"C:/IPSE_temp/CEA_schwing.exe";
if (CreateProcess(rt.c_str(), NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
...
因为rt.c_str()
现在与CreateProcess()
的第一个参数兼容,该参数是LPCWSTR
,它将接受c_str()
的const wchar_t *
指针(第二个参数不接受const
Pointer)。
另外,您可以声明wchar_t buf[MAX_PATH]
并将其用作CreateProcess()
中的第二个参数,该参数类型为LPWSTR
(non-const):
wchar_t buf[MAX_PATH];
wcscpy_s(buf, L"C:/IPSE_temp/CEA_schwing.exe");
CreateProcess(0, buf, ...);
您还可以在第8个参数中设置工作目录:
wchar_t buf[MAX_PATH];
wcscpy_s(buf, L"C:\IPSE_temp\CEA_schwing.exe");
std::wstring dir = L"C:\IPSE_temp";
CreateProcess(0, buf, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, dir.c_str(), &si, &pi);
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 终端不会为C++文件创建.exe文件吗
- 在函数内部的声明中初始化数组,并在外部使用它
- 在Windows中以.exe的形式运行c++
- 使外部项目可用于find_package CMake
- 每次我要使用外部资源时,我都会得到:collect2。exe:错误 ld 返回 1 退出状态
- 执行AppData的外部EXE
- exe文件不被识别为内部或外部命令,可操作的程序或批处理文件在C++
- 启动外部VR exe应用程序后,VR耳机的虚幻丢失跟踪
- 通过C 运行外部.exe
- 调用外部函数(从一个exe到另一个exe)
- 更准确的计时器,用于测量来自 Python 的外部.exe运行时
- Eclipse CDT - 如何在外部控制台 (cmd.exe) 中运行编译.exe
- CImg 错误:"gm.exe"未被识别为内部或外部命令,
- windows DLL函数调用外部exe文件无效
- 在Visual Studio的发布模式下运行外部c++ exe
- 嵌入外部.exe到我编译的.exe
- Exe二进制文件只在IDE外部崩溃
- 在子窗口(C++,win32)中执行外部exe
- 从生成库切换到exe或dll时出现无法解决的外部符号错误