スポンサーリンク

Windowsで環境変数を設定してアプリケーション起動(1)

CreateProcessで環境変数を設定してアプリケーションを起動できる。

display_myenvs.exe(テスト用)

テスト用の環境変数を表示するプログラム。

// プログラム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;

}

test.exe

// プログラム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;
   }

}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: