【发布时间】:2016-08-03 16:41:59
【问题描述】:
我尝试使用来自 C++ 应用程序的参数启动一个新进程,但它不起作用 - 它只是在没有这些参数的情况下启动进程
这是我的代码
void Launch(HWND hWnd) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
char bff[512];
size_t size = strlen(bff) + 1;
wchar_t* bff2 = new wchar_t[size];
size_t outSize;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
sprintf_s(bff, "-rc:eu -lac:eng");
mbstowcs_s(&outSize, bff2, size, bff, size-1);
char* pathe = NULL;
size_t size3 = MAX_PATH;
pathe = _getcwd(pathe, size3);
std::string myString(pathe);
std::size_t found = myString.find_last_of("\\");
wchar_t* txt = L"\\Client.exe";
std::wstring stre(txt);
std::wstring stemp = s2ws(myString) + stre;
return;
if (!CreateProcess(stemp.c_str(), bff2, NULL, NULL, 0, 0, NULL, NULL, &si, &pi)) {
MessageBox(hWnd, L"Cannot launch Client!", L"Error", 0);
return;
}
MessageBox(hWnd, L"Client should start soon!", L"Success!", 0);
}
谢谢
【问题讨论】:
-
什么,关于再次阅读
CreateProcess()文档?您应该快速找出问题所在。 -
是不是应该在createprocess函数的第一个参数中传入参数?
-
不,但
bff也应该使用宽字符。 -
我正在传递 bff2,那是 Widechar,不是吗?它包含我对应用程序的论点
-
char bff[512]; size_t size = strlen(bff) + 1;不正确;bff的内容在您明确设置之前是未定义的。但是由于您希望size成为wchar_t数组的大小,您可能只想说wchar_t bff2[512];。而且您似乎只是在使用它来转换文字 C 字符串;为什么不使用宽文本 C 字符串 (L"...")?即便如此,既然您使用的是 C++,并且在函数后面使用了wstring,为什么不到处使用wstring?