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
可能会隐藏窗口。但这是抑制控制台窗口的错误方法。 CreateProcess
和 CREATE_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 不是有效