2012-07-12 35 views
0

我试图获取本地'程序文件'目录路径并追加一些额外的路径,并简单地执行它。不能让它正常工作..C++ SHGetFolderPath问题

这是我当前的代码:

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这是对“程序文件”目录的路径,而不是运行整个路径。

但是当我尝试使用,而不是在CreateProcess功能localAppData VAR的ss 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; 

任何想法?

回答

1
 
wchar_t localAppData[MAX_PATH]; 
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData); 
std::wstringstream ss; 
  1. 的SHGetFolderPath要求指针调用者分配的阵列,并用得到的路径填充。

  2. 不要忘记std命名空间。

+0

请参阅我的更新.. – user838437 2012-07-12 13:53:17

+0

对不起,现在很难理解现在的问题。也许你可以用你当前的代码发布一个新的问题,没有历史。 – 2012-07-12 13:57:33

+0

此外,情况“没有错误,但应用程序未运行”意味着您不检查所调用函数的返回值。请提供更多信息。 – 2012-07-12 13:58:46

1

SHGetFolderPath是不会分配缓冲区为你改变的localAppData值,所以像你在这里传递它,它不接受wchar_t**。您需要分配缓冲一下,比如:

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

至于wstringstream,你using namespace std;?如果不是,则需要指定类型为std::wstringstream

+1

你是关闭一个,MAX_PATH已经包含终止零。没有伤害,但技术上不正确。 – 2012-07-12 12:09:55

+0

@HansPassant:没有完全记得,所以我觉得玩起来很安全。感谢您的提醒。 – Jon 2012-07-12 12:25:52

+0

请参阅我的更新.. – user838437 2012-07-12 13:53:37