2016-09-11 2 views
2

Ich implementiere ein kleines Paket von Programmen für Batch-Benutzer zu verwenden. Fast alles in diesem Paket ist in C++ erstellt und wird von Java aufgerufen.Festlegen einer temporären Umgebungsvariablen für Batch aus C++

Wie würde ich eine Umgebungsvariable für die Batch-Datei festlegen?

ich diese verwendet haben versucht:

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); 
} 

jedoch die Batch-Datei keine neue Variable gesehen haben. Sollte ich system("set thing=value"); verwenden?

+0

Auf Posix, betrachten [setenv (3)] (http://man7.org/linux/man-pages/man3/setenv.3.html). Unter Windows möglicherweise ['SetEnvironmentVariable'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686206 (v = vs.85) .aspx). –

+0

Ich verwende Windows, und SetEnvironmentVariable scheint auch nicht zu funktionieren. – Dan

+0

@Dan SetEnvironmentVariable sollte es tun. Es wird jedoch nur für den aktuellen Prozess festgelegt. Wenn sich der Prozess nicht ändert und immer noch fehlschlägt, verwenden Sie GetLastError(), um weitere Informationen zu finden, –

Antwort

0

Nach einigen Nachforschungen kam ich zu dem Schluss, dass ein Kindprozess die Umgebung des Elternprozesses nicht ändern kann.

+0

hilft das? [Veränderte Elternprozess-Umgebungsvariable] (http://www.perlmonks.org/?node_id=658278) – elzooilogico

+0

@elzooilogico Das ist ziemlich extrem hacky. – Dan

Verwandte Themen