我最近开始学习WinAPI,其中一个首要任务是创建运行另一个程序的程序(第二个程序只打印环境变量及其参数)并为其提供自定义环境变量。应在文件中指定这些自定义环境变量。 我在C中编写了以下代码,但它不起作用。我收到运行时错误" msys-1.0.dll没有被安装..." 怎么了?我使用Visual Studio 2015来编译此代码。 GCC也编译它,但似乎程序什么都不做(甚至没有显示错误信息)。 如果我将自定义变量添加到父进程的变量,问题就会消失。我看到了所有的变数。但是,如果只提供自定义变量,我会看到此错误消息。 请帮帮我!
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ENV_STR_LEN 2000
#define FILE_NAME_LEN 100
#define ENV_NUM 256
void run_program(char * program_name, char * env){
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
CreateProcess( NULL, // No module name (use command line)
program_name, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
(LPVOID) env, //
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi );
}
int main(int argn, char ** args, char **environment) {
FILE * f = fopen("vars", "r");
if (f == NULL) {
printf("Error");
return 0;
}
char pr_name [] = "task1.exe";
char * allenvs = (char *)malloc(ENV_NUM * ENV_STR_LEN * sizeof(char));
char * j = allenvs;
while(!feof(f)) {
fscanf(f, "%s", j);
j += strlen(j) + 1;
}
*j = '\0';
run_program(pr_name, allenvs);
return 0;
}
&#34; vars&#34;的内容:
uyuih=gfhjlkjgdlsj
jgk=tdfdsfsd
dfdl=5664
rrrr=ttyfdf