1

以下のコードは以下を生成します:

MyProgram1.exeの0x749ab763で未処理の例外:0xC0000005:アクセス違反の書き込み場所0x00d4eb38。

    SECURITY_ATTRIBUTES sa = {0};
    sa.nLength = sizeof(sa);
    STARTUPINFO si = {0};
    si.cb = sizeof(si);
    //si.cbReserved2 = sizeof(si);
    si.lpDesktop = L"winsta0\\default";

    CreateProcessAsUser(hUserTokenDup, NULL, L"Setup.exe", &sa, &sa, false, NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL, &si, &procinfo);

コードに何か問題がありますか?助けてください

4

1 に答える 1

4

からCreateProcessAsUser()、3番目のパラメータを参照します。

この関数のUnicodeバージョンであるCreateProcessAsUserWは、この文字列の内容を変更できます。したがって、このパラメーターを読み取り専用メモリー(const変数やリテラル文字列など)へのポインターにすることはできません。このパラメータが定数文字列の場合、関数によってアクセス違反が発生する可能性があります。

への変更:

WCHAR exeName[] = L"Setup.exe";

exeName代わりに、3番目のパラメーターとして渡します。

于 2012-09-26T10:36:50.543 に答える