C++ C++;在程序文件中创建文件的过程

C++ C++;在程序文件中创建文件的过程,c++,windows,windows-shell,C++,Windows,Windows Shell,我试图使用CreateProcess来运行位于用户程序文件目录中的文件,因此我尝试使用CSIDL\u Program\u FILESX86,因为特定程序将始终位于(x86)文件夹中 我的问题是我无法让它工作,因为某种原因,我找不到任何关于如何使用createprocess和CSIDL\u PROGRAM\u FILESX86 你能告诉我这样的例子吗?也许我应该使用不同的函数 编辑: 这是我当前的代码: wchar_t* localAppData = 0; SHGetFolderPath(NULL

我试图使用
CreateProcess
来运行位于用户程序文件目录中的文件,因此我尝试使用
CSIDL\u Program\u FILESX86
,因为特定程序将始终位于(x86)文件夹中

我的问题是我无法让它工作,因为某种原因,我找不到任何关于如何使用
createprocess
CSIDL\u PROGRAM\u 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));
wchar\u t*localAppData=0;
SHGetFolderPath(NULL、CSIDL_程序_文件x86、0、NULL和localAppData);
wstringstreamss;
sswinapi文档中有一个函数,可能会有所帮助

编辑:

似乎其中一个已被弃用,因此请改用

根据评论编辑:

如果您使用vista及以上版本,请使用

编辑:

您可以用CreateProcess替换CoTaskMemFree。

winapi文档中有一个新的组件,也许它会有所帮助

编辑:

似乎其中一个已被弃用,因此请改用

根据评论编辑:

如果您使用vista及以上版本,请使用

编辑:


您可以用CreateProcess替换CoTaskMemFree。

问题在于Windows API所需的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(), ...);
wchar\u t localAppData[MAX\u PATH];//数组,而不是指针。
SHGetFolderPath(NULL,CSIDL_程序_文件,0,NULL,localAppData);
std::wstringstream ss;

ss问题在于Windows API所需的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(), ...);
wchar\u t localAppData[MAX\u PATH];//数组,而不是指针。
SHGetFolderPath(NULL,CSIDL_程序_文件,0,NULL,localAppData);
std::wstringstream ss;

ss也不赞成。似乎要使用的函数是@steffen。它没有被弃用,您的函数在xp上不存在。也弃用了。似乎要使用的函数对双重post感到抱歉。XP没有被提及。也就是说,你说得对,普奈德。对不起,我发了两封信。XP没有被提及。也就是说,你说得对,普韦德。也不赞成。似乎要使用的函数是@steffen。它没有被弃用,您的函数在xp上不存在。也弃用了。似乎要使用的函数对双重post感到抱歉。XP没有被提及。也就是说,你说得对,普奈德。对不起,我发了两封信。XP没有被提及。说,你说得对,普恩德。C++不是那么复杂。包含并使用std::wstringstreamC++并没有那么复杂#包括并使用std::wstringstream这很有效,谢谢!是否有任何方法可以使用CSIDL_程序_文件或任何其他变量来允许此代码在所有Win XP/7/Vista上运行?
CSIDL_程序_文件
,虽然已弃用,但仍适用于所有Windows版本。谢谢!是否有任何方法可以使用CSIDL_程序_文件或任何其他变量来允许此代码在所有Win XP/7/Vista上运行?
CSIDL_程序_文件
,尽管已弃用,但仍适用于所有Windows版本。