【问题标题】:Setting a temporary environment variable for Batch from C++从 C++ 为 Batch 设置临时环境变量
【发布时间】:2016-09-11 11:55:33
【问题描述】:

我正在实施一小部分程序供批量用户使用。 这个包中的几乎所有东西都是用 C++ 制作的,并且是从 Java 调用的。

如何设置批处理文件使用的环境变量?

我试过用这个:

JNIEXPORT void JNICALL METHOD_NAME(JNIEnv *env, jclass theclass, jstring key, jstring value) {
        const char* thekey = env->GetStringUTFChars(key, false);
        const char* thevalue = env->GetStringUTFChars(value, false);
        std::string envvar;
        envvar.append(thekey);
        envvar.append("=");
        envvar.append(thevalue);
        _putenv(envvar.c_str());
        env->ReleaseStringUTFChars(key, thekey);
        env->ReleaseStringUTFChars(value, thevalue);
}

但是批处理文件没有看到任何新变量。 我应该使用system("set thing=value");吗?

【问题讨论】:

  • 在 Posix 上,考虑setenv(3)。在 Windows 上,可能是 SetEnvironmentVariable
  • 我使用的是 Windows,但 SetEnvironmentVariable 似乎也不起作用。
  • @Dan SetEnvironmentVariable 应该这样做。但是,它只为当前进程设置。如果进程没有改变并且仍然失败,请使用 GetLastError() 查找更多信息,
  • 我需要为将使用我的程序的批处理文件设置它。
  • 这是我的代码:pastebin.com/Bp0nnRxR 它只是没有在批处理文件中设置变量。它是这样工作的:Batch calls Java which calls C++ that sets a variable for Batch

标签: c++ windows batch-file java-native-interface


【解决方案1】:

经过一番研究,我得出结论,子进程不能修改父进程的环境。

【讨论】:

猜你喜欢
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2015-07-29
相关资源
最近更新 更多