CreateProcess总是失败 我尝试用C++在CreateProcess中创建一个过程。但是这个函数总是返回false

CreateProcess总是失败 我尝试用C++在CreateProcess中创建一个过程。但是这个函数总是返回false,c++,windows,winapi,C++,Windows,Winapi,以下是我的一些代码: 如果是UNICODE std::wstring exename= 其他的 char*exename= 恩迪夫 _T‪c:\\Windows\\Notepad.exe; STARTUPINFO si; memset&si,0,sizeofSTARTUPINFO; si.cb=sizeofSTARTUPINFO; si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOW; 处理信息; 如果CreateProcessexena

以下是我的一些代码:

如果是UNICODE std::wstring exename= 其他的 char*exename= 恩迪夫 _T‪c:\\Windows\\Notepad.exe; STARTUPINFO si; memset&si,0,sizeofSTARTUPINFO; si.cb=sizeofSTARTUPINFO; si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOW; 处理信息; 如果CreateProcessexename,NULL,NULL,NULL,false,0,NULL,NULL,&si,&pi {
cout我不确定您是否想欺骗我们,但在c:\\n前面的后面有一个不可见的字符

从此处复制/粘贴此行以使其正常工作:

auto const exename = _T("c:\\Windows\\Notepad.exe");
您可以使用十六进制编辑器查看隐藏字符:


您可以通过复制/粘贴问题中的行来测试此问题。

:当函数的返回值指示此类调用将返回有用数据时,您应该立即调用GetLastError函数。您没有,并且返回值在调用时没有意义。不清楚为什么要使用通用文本映射Ping。只需调用Unicode版本并暂停一天。如果必须使用通用文本映射,只需执行以下操作:auto const exename{u Tc:\\Windows\\Notepad.exe};如果定义了UNICODE,那么您的代码将无法编译,因为您无法按原样将std::wstring传递给CreateProcess,您需要调用它的c_str或data方法,而您没有这样做。在我的十六进制编辑器中,将原始文本粘贴为UTF-16会显示隐藏字符是UNICODE codepoint,当粘贴为ANSI。@RemyLebeau你知道它是如何实现的吗?如果你将完全限定路径名从文件管理器复制粘贴到代码编辑器中,它就可以实现。谢谢你的回答。我用十六进制编辑器检查了我的代码,然后在c:\\之前找到一些奇怪的不可见字符。正如@IInspectable所说的,我复制了路径fr在文件属性对话框的“安全”选项卡上。我键入了路径而不是粘贴路径,程序运行良好。非常感谢!@IInspectable您能告诉我从Windows资源管理器复制文件路径时添加隐藏字符的原因吗?这是一个bug还是Windows出于某种目的打算这样做?