【发布时间】:2018-07-09 02:28:05
【问题描述】:
我运行以下 C 代码来创建一个进程。 exe文件位于C:\Program Files\Exes\Start\process1.exe
CreateProcessW(NULL, (char*) exePath,
NULL, NULL, TRUE,
flags,
NULL, NULL, &startupInfo, &processInformation);
现在一些计算机随机有这个名为 Program 的文件位于 C:\Program,这会导致创建过程失败并出现以下错误:
%1 不是有效的 Win32 应用程序。
除了重命名文件之外,还有其他方法可以解决此问题,因为有几十个 Windows Vms 执行此 C 代码。这个错误在一些机器上随机发生。
【问题讨论】:
-
将 EXE 路径作为 first 参数传递 - 指定 EXE 路径的那个?
-
CreateProcessW的第二个参数必须是宽字符串。(char *)exePath是错误的,您应该会看到编译器错误消息。如果没有,请调整您的编译器设置。 -
@immibis 所以我将 exepath 作为应用程序名称(第一个参数)和命令行参数(第二个参数)作为 null 传递?
-
您可以将命令行作为第二个参数传递。我不确定它是否可以为 NULL,但如果程序不关心,那么您可以使用空白字符串或程序名称。
-
如果只是程序名,则使用
CreateProcessW(L"C:\\Program Files\\Exes\\Start\\process1.exe", NULL, ...),否则,声明wchar_t buf[300];,填上,然后输入CreateProcessW(NULL, buf, ...)
标签: c winapi createprocess