使用自定义环境变量运行程序(C / Windows 10)

时间:2016-03-07 12:26:51

标签: c windows winapi windows-10

我最近开始学习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

0 个答案:

没有答案