Winapi windows API shellexecute无法执行批处理文件

Winapi windows API shellexecute无法执行批处理文件,winapi,Winapi,我正在尝试使用shellexecute执行批处理文件,但它没有被执行。 以下是我使用API的方式: temp += "cmd.exe /C c:\\AutoTest\\Target1_CmdList.bat "; HINSTANCE hReturnCode=ShellExecute(NULL, _T("open"), NULL,temp.c_str(), "C:\\Autotest", SW_HIDE); 谁能告诉我这条路对吗? 我搜索了提到同样内容的帖子,并做了相应的修改 谢谢您正在

我正在尝试使用shellexecute执行批处理文件,但它没有被执行。 以下是我使用API的方式:

temp += "cmd.exe /C c:\\AutoTest\\Target1_CmdList.bat ";
    HINSTANCE hReturnCode=ShellExecute(NULL, _T("open"), NULL,temp.c_str(), "C:\\Autotest", SW_HIDE);
谁能告诉我这条路对吗? 我搜索了提到同样内容的帖子,并做了相应的修改

谢谢

您正在为lpFile参数传递NULL。该参数不能省略,必须指定要对其执行操作的文件的名称

大概你是想写:

ShellExecute(NULL, _T("open"), temp.c_str(), NULL, "C:\\Autotest", SW_HIDE);
将cmd.exe传递给ShellExecute没有什么意义。shell知道如何处理.bat文件。直接传递.bat文件

最好使用ShellExecuteEx,因为它与ShellExecute不同,能够正确报告错误。检查MSDN中所述的错误。检查ShellExecuteEx的返回值,如果为false,则调用GetLastError以获取错误代码


更重要的是,有时使用u T宏,有时不使用宏,似乎是不协调的。我建议您停止使用_T宏,并决定是否以ANSI或Unicode为目标。

我也尝试过这种方法,但仍然失败。它只是打开文件夹c:\Autotest作为第四个参数指定的路径。然后在其他地方出现错误。我们只回答你提出的问题。或者你认为你问题中的代码是正确的?省略lpFile是可以的。也许我误解了你的意思。我试过使用以下代码:ShellExecuteFull、\u Topen、temp.c\u str、NULL、c:\\Autotest、SW\u HIDE;因为它不起作用,我试着把温度值作为第四个参数,也就是我刚才问的那个参数。两者都不起作用。我的问题是,我想使用shellexecute执行批处理文件,这在createprocess中也可以正常工作,但要求使用shellexecute APIDo记住,我不知道temp中有什么,或者实际上你的.bat中有什么。我不知道你的程序怎么会失败。而且你没有做任何错误检查。是时候让你停止对即时修复的希望,加入一些移植来调试你的程序了。首先进行我建议的所有更改。@Sneha:与您的问题无关,但是当存在固定的API ShellExecuteEx时,谁会要求您使用损坏的API ShellExecute?另外,在注释中,您似乎知道您在错误的参数中传递了文件名。但你仍然发布了代码。这是一个常见的错误。你被卡住了。你随便试了一堆东西。你的代码越来越糟糕。然后你问这个问题,贴出你的最后一段代码,这段代码包含了你所有错误的试错实验。请多加小心。发布你最好的代码。