2

CreateProcessユーザーのProgramFilesディレクトリにあるファイルを実行するために使用しようとしCSIDL_PROGRAM_FILESX86ています。その特定のプログラムは常に(x86)フォルダーにあるため、使用しようとしています。

私の問題は、それを動作させることができないということです。何らかの理由で、使用方法の例が見つからずcreateprocessCSIDL_PROGRAM_FILESX86

そのような例を教えてもらえますか?たぶん私は別の関数を使用する必要がありますか?

編集

これは私の現在のコードです:

wchar_t* localAppData = 0;
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, &localAppData);

wstringstream ss;
ss << localAppData << L"/MyApp/MyExe.exe";

CreateProcess(static_cast<void*>(localAppData));

私はこれを手に入れていSHGetFolderPathます:

cannot convert parameter 5 from wchar_t ** to LPWSTR

また、ヘッダーにsstreamを含めても、次のエラーが発生します。

'wstringstream' : undeclared identifier

注:XPとVista / 7の両方で動作するために必要なため、SHGetFolderPathを使用しています

何か案は?

4

2 に答える 2

0

winapiドキュメントにはSHGetSpecialFolderPathがあり、おそらくそれが役立つでしょう。

編集:

1つは非推奨のようですので、代わりにSHGetFolderPathを使用してください。

コメントに従って編集:

ビスタ以上の場合は、SHGetKnownFolderPathを使用してください。

編集:stackoverflowコードの例

CoTaskMemFreeをCreateProcessに置き換えるだけです。

于 2012-07-12T07:20:23.580 に答える
0

問題は、WindowsAPIに必要なCスタイルの文字列処理です。

wchar_t localAppData[MAX_PATH]; // Array, not a pointer.
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, 0, NULL, localAppData);

std::wstringstream ss;
ss << localAppData << L"/MyApp/MyExe.exe";

CreateProcess(ss.str().c_str(), ...);

CSIDL_PROGRAM_FILESまた、でのみサポートされていることに注意してくださいSHGetFolderPath

于 2012-07-12T17:53:18.537 に答える