我正在尝试获取本地“程序文件”目录路径并为其添加一些额外路径并执行它。无法让它正常工作..
这是我目前的代码:
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
这是“Program Files”目录的路径,而不是运行整个路径。
但是当我尝试在ss
函数中使用localAppData
var而不是CreateProcess
var时,我收到有关使用错误类型的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;
有什么想法吗?
答案 0 :(得分:1)
wchar_t localAppData[MAX_PATH]; SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData); std::wstringstream ss;
SHGetFolderPath需要指向调用者分配的数组的指针,并用结果路径填充它。
不要忘记std名称空间。
答案 1 :(得分:1)
SHGetFolderPath
不会为您分配缓冲区并更改localAppData
的值,因此它不接受wchar_t**
,就像您在此处传递它一样。您需要自己分配缓冲区,例如:
whar_t localAppData[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);
关于wstringstream
,你是using namespace std;
吗?如果没有,则需要将类型指定为std::wstringstream
。