0

XP と Vista/7 の両方で「Program Files」ディレクトリ パスを取得する単純なコード行をいくつか書き込もうとしています (vista/7 では x86 フォルダーへのパスが必要です)。アプリケーションを実行します。

これは私がこれまでに持っているものですが、外部プログラムを実行しておらず、エラーも発生していません..

wchar_t localAppData[MAX_PATH];
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);

std::wstringstream ss;
ss << localAppData << L"/MyApp/MyExe.exe";
LPCWSTR str = ss.str().c_str();
CreateProcess(str, NULL,NULL, NULL,FALSE,NULL,NULL,NULL,&sInfo,&pInfo);
return str;

hmjd の提案に従って、コードを次のように更新しました。

wchar_t localAppData[MAX_PATH];
STARTUPINFO sInfo = { sizeof(STARTUPINFO), NULL, L"winsta0\\default" };
PROCESS_INFORMATION pInfo;
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);
std::wstringstream ss;
ss << localAppData << L"/PacificPoker/bin/888poker.exe";
std::wstring ss_str = ss.str();
wchar_t* path = new wchar_t[ss_str.length() + 1]();
std::copy(ss_str.begin(), ss_str.end(), path);
CreateProcess(path, NULL,NULL, NULL,FALSE,NULL,NULL,NULL,&sInfo,&pInfo);
delete[] path;
return GetLastError();

の '3' をまだ取得していますが、存在するGetLastErrorことを確認できC:\Program Files\MyApp\MyExe.exeます..

4

2 に答える 2

2

コードに関するいくつかの問題:

  • sInfoは初期化されていません。少なくともcbメンバーを設定する必要があります

    STARTUPINFO sInfo = { sizeof(STARTUPINFO),  // 'cb'
                          NULL,                 // 'lpReserved'
                          L"winsta0\\default" };// 'lpDesktop'
    

詳細については、を参照STARTUPINFOしてください。

  • への最初の引数CreateProcess()は非 const である必要がありますが、ダングリング ポインターではない場合c_str()に渡されます。メソッドは を返し、はそのポインタを返しますが、これは一時オブジェクトであり、式 ( )の最後で破棄され、ダングリング ポインタが作成されます。への変更:const ss.str()std::stringc_str()std::string;str

    std::wstring ss_str = ss.str();
    wchar_t* path = new wchar_t[ss_str.length() + 1]();
    std::copy(ss_str.begin(), ss_str.end(), path);
    CreateProcess(path, ...);
    delete[] path;
    

すべての関数とクエリの戻り値をチェックして、GetLastError()失敗の理由を特定します。

于 2012-07-12T14:32:52.010 に答える
0

おそらくこれを試したことがあるでしょうが、 ?の代わりにを設定するとlocalAppData、有効な文字列が得られます。CSIDLCSIDL_PROGRAM_FILESCSIDL_PROGRAM_FILESX86

CSIDL_PROGRAM_FILESX86XP でテストしている場合、何が返されるかわかりません。

于 2012-07-13T04:04:26.180 に答える