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

注意:我正在使用 SHGetFolderPath 因为我需要它才能在 XP 和 Vista/7 上工作

编辑:

上面的代码有一个错误,我试图运行localAppData“程序文件”目录的路径,而不是运行整个路径。

但是当我尝试在函数中使用ssvar 而不是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
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 回答
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 回答