【发布时间】: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