0

ローカルの「プログラムファイル」ディレクトリパスを取得し、それに追加のパスを追加して、単純に実行しようとしています。うまく動かせない..

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

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 を使用しています。

編集:

上記のコードに間違いがあったためlocalAppData、パス全体を実行するのではなく、'Program Files' ディレクトリへのパスを実行しようとしました。

しかし、関数で var のss代わりにlocalAppDatavarを使用しようとするとCreateProcess、間違ったタイプの var を使用しているというエラーが表示されます (LPCWSTR を使用する必要があります)。

しかし、これを試してもうまくいきません..エラーはありませんが、アプリケーションは実行されていません.何が欠けていますか?

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;

何か案は?

4

2 に答える 2

1

SHGetFolderPathはバッファを割り当てて の値を変更するわけではないので、ここで渡すように をlocalAppData受け入れません。wchar_t**たとえば、バッファを自分で割り当てる必要があります。

whar_t localAppData[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);

wstringstream、あなたusing namespace std;ですか?そうでない場合は、タイプを として指定する必要がありますstd::wstringstream

于 2012-07-12T12:08:12.083 に答える
1
wchar_t localAppData[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);
std::wstringstream ss;
  1. SHGetFolderPath は、呼び出し元が割り当てた配列へのポインターを必要とし、結果のパスで埋めます。

  2. std 名前空間を忘れないでください。

于 2012-07-12T12:07:31.743 に答える