CreateProcess失败;代码193.%/不是有效的win32应用程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CreateProcess失败;代码193.%/不是有效的win32应用程序相关的知识,希望对你有一定的参考价值。

我就是安装了软件就无法运行,但是不是病毒哦!!整么解决啊!!
我安装的是穿越火线,运行不起的原因是被卡巴斯基误杀了!!这么办呢??

解决方法如下:

1、先在File->Project Structure...路径下打开Project Structure出现的界面如下图所示。

(1)接下来注意观察上图中JDK location:位置中的勾选项,默认路径指向了E盘SDK的安装路径下了,在此路径下查看不是SDK的安装路径

(2)此时通过桌面的我的电脑->右键->高级->环境变量 查看配置的环境变量,如下图。

2、下面通过看java_home可以看到JDK是安装在C盘的接下来取消JDK location中的勾选,点击下面路径右侧的浏览按钮选择JDK的正确的安装路径,如图。

(1)最后根据环境变量的配置,选择了jdk1.8.0_91,然后点击OK执行代码界面上的Gradle Sync操作,看下最后的输出日志,如图。

(2)已经构建成功了,问题解决!

参考技术A 把那文件恢复并弄成信任文件本回答被提问者采纳

CreateProcess 函数而不是系统

【中文标题】CreateProcess 函数而不是系统【英文标题】:CreateProcess function instead of system 【发布时间】:2014-10-24 07:25:01 【问题描述】:

我创建了一个代码,它使用 Windows 窗体应用程序来构建一个 gui。我在我的代码中使用系统命令来调用外部.exe。然而,这种方法会创建一个命令行终端。我发现我可以用 CreateProcess 函数here 替换系统。我应该如何使用这个功能?我应该指定哪些参数才能运行?我现在的代码是:

 string run_template = "a.exe -i " + s1 + " -r 10 -f image2  filename%03d.jpg";
 system(run_template.c_str());

编辑:

 #include <tchar.h>

 string workPath = "";
 string args = "-i " + s1 + " -r 10 -f image2  vid/frames/filename%03d.jpg";

 HINSTANCE hRet = ShellExecute(NULL, _T("open"), _T("a.exe"), _T(args.c_str()), _T(workPath.c_str()), SW_HIDE);
 DWORD errNum = GetLastError();

我收到以下错误:

1>c\projects\first_api\first_api\Form1.h(229): error  C2065: 'Largs' : undeclared identifier
1>c:\projects\first_api\first_api\Form1.h(229): error C2228: left of '.c_str' must have class/struct/union
1>          type is ''unknown-type'' 
1>c:\projects\first_api\first_api\Form1.h(229): error C2065: 'LworkPath' : undeclared identifier
1>c:\projects\first_api\first_api\Form1.h(229): error C2228: left of '.c_str' must have class/struct/union

编辑2:

string run_template = "a.exe -i " + s1 + " -r 1 -f image2 /filename%03d.jpg";
//system(run_template.c_str());

STARTUPINFOA si = sizeof(STARTUPINFOA), 0;
PROCESS_INFORMATION pi = 0;

if (CreateProcessA(NULL, const_cast<char*>(run_template.c_str()), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))   
     CloseHandle(pi.hThread);
     CloseHandle(pi.hProcess);

使用上述代码时,命令提示符仍然存在。

【问题讨论】:

您提供的链接指向旧的 Windows Mobile 6.5 版本。虽然它应该与完整的 Windows 版本相同,但您可能想要use a link for the proper version first。顺便说一句,该链接包含link to a complete example。 您问的是CreateProcess 还是使用ShellExecute 时遇到的编译错误?这两个是不同的东西!您可以保留此问题(在尝试使用 CreateProcess 并添加该尝试之后),并提出有关使用 ShellExecute 的新问题。 是的,由于 Vembu 的 Aravind 回答,我已经更改了问题。基本上我想替换系统以隐藏命令行。 然后更新完整问题,包括标题,以反映新问题。或发布新问题。 CreateProcess 有据可查。为什么不能简单地阅读文档并调用它。您似乎没有尝试这样做。 【参考方案1】:
string run_template = "a.exe -i " + s1 + " -r 10 -f image2  filename%03d.jpg";

STARTUPINFOA si = sizeof(STARTUPINFOA), 0;
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;

PROCESS_INFORMATION pi = 0;

vector<char> cmdline(run_template.begin(), run_template.end());
if (CreateProcessA(NULL, &cmdline[0], NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))

    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);

【讨论】:

我收到以下错误:错误 C2664: 'CreateProcessA' : cannot convert parameter 2 from 'const char *' to 'LPSTR' 第二个参数没有声明为const,但c_str()返回的指针是。你必须把它扔掉。 对不起,我试图理解,但我在这里陷入了更大的混乱。我已经尝试了您的解决方案,现在我无法将参数 9 从 'STARTUPINFO *' 转换为 'LPSTARTUPINFOA' 您需要将 STARTUPINFO 结构更改为 STARTUPINFOA 结构,因为该示例使用的是 CreateProcessA() 而不是 CreateProcess() (这是一个根据您的 UNICODE 设置确定要调用哪个版本的宏)。该示例不能像您期望的那样使用 STARTUPINFO 和 CreateProcess(),因为它使用的 std::string 不是“UNICODE/non UNICODE”感知的,因此总是基于 char * 而不是有条件地成为 wchar_t *基于启用 UNICODE 的时间... @RemyLebeau 不,不要把它扔掉。字符串必须是可写的。将其复制到可写缓冲区并传递可写缓冲区。【参考方案2】:

可以改用ShellExecute函数,非常容易理解。

例子:

string workPath = "D:\\MyWorkPath\";
string args = "-i " + s1 + " -r 10 -f image2  filename%03d.jpg

LPCTSTR lArgs = args.c_str();
LPCTSTR lPath = workPath.c_str();
HINSTANCE hRet = ShellExecute(NULL, _T("open"), _T("a.exe"), lArgs, lPath, SW_HIDE);

ShellExecute 函数中的最后一个参数隐藏控制台窗口。

注意:确保您正在运行的应用程序 (a.exe) 没有阻塞,即不等待从您那里获得输入。或者简单地说,您没有在 a.exe 应用程序中使用任何 cin/scanf。

希望这会有所帮助。

【讨论】:

我得到 '_T': identifier not found. _T 是一个使字符串“字符集中立”的宏。要解决此问题,请包含“tchar.h”文件。 ShellExecute 在传递可执行函数时是错误的函数。使用CreateProcess。既然可以直接调用,为什么还要让ShellExecute 调用CreateProcess?并且不推荐ShellExecute,它已被弃用并且无法正确报告错误。使用ShellExecuteEx。不要无条件拨打GetLastError。这里特别令人震惊,因为ShellExecute 不会以这种方式报告错误。 Hmmmmmmm....... 您可以将该值分配给 LPCTSTR 类型变量并使用它。编辑了上面的答案。 @AravindatVembu 不,您的编辑不会从 ANSI 编码文本转换为 UTF-16 编码文本。 SW_HIDE 可能会隐藏窗口。但这是抑制控制台窗口的错误方法。 CreateProcessCREATE_NO_WINDOW 是正确的方法。

以上是关于CreateProcess失败;代码193.%/不是有效的win32应用程序的主要内容,如果未能解决你的问题,请参考以下文章

DBeaver执行sql脚本报错:CreateProcess error=193, %1 不是有效的 Win32 应用程序。

DBeaver执行sql脚本报错:CreateProcess error=193, %1 不是有效的 Win32 应用程序。

Failed to deploy 'Compose: docker' CreateProcess error=193, %1 不是有效的 Win32 应用程序

无法运行程序“C:\Users\admin\AppData\Local\Android\Sdk\platform-tools\adb.exe”:CreateProcess 错误=193,%1 不是有效

NP++ C 执行->CreateProcess() 失败,错误代码为 2

CreateProcess api 在 Windows 10 上失败,错误代码为 122