スポンサーリンク
CreateProcessで環境変数を設定してアプリケーションを起動できる。
テスト用の環境変数を表示するプログラム。
// プログラム1 環境変数を表示 // display_myenvs.exe #include <iostream> #include <windows.h> int main() { char EnvVal[32767]; size_t limit = sizeof(EnvVal) / sizeof(EnvVal[0]); std::cout << "------------------------" << std::endl; // 環境変数を取得 GetEnvironmentVariableA("MY_ENV_STR", EnvVal, limit); std::cout << "MY_ENV_STR: " << EnvVal << std::endl; std::cout << "------------------------" << std::endl; GetEnvironmentVariableA("MY_ENV_INT",EnvVal, limit); std::cout << "MY_ENV_INT: " << EnvVal << std::endl; }
// プログラム2 環境変数設定してアプリケーションを起動 #include <iostream> #include <windows.h> int main() { //////////////////////////////////////////////////// // 独自の環境変数設定 // 環境変数作成 std::wstring envVar1 = L"MY_ENV_STR=HelloWorld"; std::wstring envVar2 = L"MY_ENV_INT=12345"; // 環境変数を設定するときは各変数を\0文字で区切り、終端を\0\0にする // "VAL1=value1\0VAL2=value2\0\0" std::wstring envVars; envVars += envVar1; envVars.push_back(L'\0'); // 環境変数の区切り envVars += envVar2; envVars.push_back(L'\0'); // 環境変数の区切り // 最後は\0\0で終端 envVars.push_back(L'\0'); envVars.push_back(L'\0'); // アプリ起動 STARTUPINFOW si = { sizeof(si) }; PROCESS_INFORMATION pi; std::wstring apppath = L"display_myenvs.exe"; BOOL ret = CreateProcessW( nullptr, &apppath[0], // 破壊的パースがされるため非constで渡す nullptr, nullptr, FALSE, CREATE_UNICODE_ENVIRONMENT, (void*)envVars.c_str(), nullptr, &si, &pi ); // エラー処理 if (!ret) { std::cerr << "CreateProcessA failed with error: " << GetLastError() << std::endl; return 1; } }