0

基本的に、新しいプロセスを作成し、親プロセスからその環境を定義したいと考えています。CreateProcessW(変更された) UNICODE 環境を使用して に渡したいのlpEnvironmentですが、ANSII 環境ブロックと比較してコンテンツがどのように見えるべきかわかりません。

私が実際に見つけた唯一のドキュメントは、MSDN にあります。

ANSI 環境ブロックは 2 つのゼロ バイトで終了することに注意してください。1 つは最後の文字列用で、もう 1 つはブロックを終了するためのものです。Unicode 環境ブロックは、4 つのゼロ バイトで終了します。最後の文字列用に 2 つ、ブロックを終了するためにさらに 2 つです。

今、私はしようとしました

  1. 呼び出しGetEnvironmentStringsて子プロセスに渡します
  2. 呼び出しGetEnvironmentStringsW て子プロセスに渡す
  3. これらのブロックを追加の環境文字列で変更し、それを渡します

それらのどれも機能しません

私は本当にそれを機能させるために設定lpEnvironmentすることしかできませんでしNULLたが、今は親の処理環境を変更して元に戻す必要があります-それがここに行く方法ですか?

(私も設定しましたCREATE_UNICODE_ENVIRONMENT

環境ブロックの何が特別なのか、誰か教えてください。ものを使って呼び出すUNICODEだけでうまくいきました...ASCIICreateProcessA()

4

1 に答える 1

1

コードなしで何が間違っているのかわかりません。しかし、これは機能します:

STARTUPINFO startInfo = {0};
PROCESS_INFORMATION procInfo = {0};

WCHAR env[] = L"key=value\0key2=value2\0\0";
WCHAR cmdline[] = L"calc";

startInfo.cb = sizeof(startInfo);
if(!CreateProcessW(NULL, cmdline, NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, env, NULL, &startInfo, &procInfo))
{
    printf("Error %d\n", GetLastError());
}

おそらく、それはあなたが間違っていることのアイデアを与えるでしょう.

于 2010-11-12T20:37:25.617 に答える