用环境变量作为参数创建进程[英] Create Process with Environment variable as a argument

问题描述

你好,

我在 C:\Ming32\ 文件夹中安装了 Mingw32 .

我将此路径添加到 PATH 变量.

当我从任何路径在命令提示符下键入命令 mingw32-make.exe 时,系统都能够找到该文件.但是当我尝试将 CreateProcess 作为第一个参数时,它失败了,错误代码为 2.

我也尝试作为第二个参数,我得到了错误代码 237.

如何解决这个问题呢.我不想在我的代码中使用 Mingw32 路径,因为我的应用程序将在不同的系统中运行,并且他们可能将 gcc 安装在不同的文件夹中.

谢谢,

推荐答案

好吧,您可以选择在安装时确定 mingw32 安装路径,或者更好地提供额外的机会在你的申请.在大多数情况下,我真的尽量避免硬编码的东西,除了算法或系统相关的常量.

除此之外,您可能在 MSDN 文档中错过了这一点CreateProcess[^]:

字符串可以指定要执行的模块的完整路径和文件名,也可以指定部分名称.在部分名称的情况下,该函数使用当前驱动器和当前目录来完成规范.该函数不会使用搜索路径.该参数必须包含文件扩展名;没有假定默认扩展名.

—MSDN
您所追求的功能通常由/a shell(例如cmd)提供.您可能想查看函数 ShellExecute[^].

问候,

Manfred

将环境变量作为参数传递毫无意义.参数的语义完全由作为子进程运行的应用程序定义.此应用程序接收到一个命令行字符串(通常在应用程序文件名称之后在控制台中键入)并由应用程序根据其语义进行处理.

尽管推测性地讲,应用程序的某些命令行参数的语义可能意味着环境变量的名称和/或值,但任何合理的应用程序都不会使用这种语义,因为它根本没有任何意义.

环境变量扮演"全局常量"或更确切地说是"全局只读值"的角色,对系统来说是全局的.它们用于一些全局设置,并且在任何应用程序的运行期间都不会更改,但需要更改一些全局设置或添加一些设置的极少数情况除外.有时它是由于安装了新的软件产品而发生的.

此外,使用环境变量来安装任何应用程序(以及以后的运行时)表明配置方式非常糟糕,或者可能是与某些软件遗留的向后兼容的方式.更合适的风格是使用系统隔离的配置或设置文件,每个应用程序.

更多详情,请参阅http://en.wikipedia.org/wiki/Environment_variable[^].

[编辑]

错误消息在我对 JackDingler 对原始问题的评论的评论中进行了解释,请参阅.

—SA

本文地址:https://www.itbaoku.cn/post/1394901.html