gpt4 book ai didi

c++ - 在 CreateProcess 的路径中使用 SHGetKnownFolderPath 来运行程序

转载 作者:行者123 更新时间:2023-11-28 04:21:09 26 4
gpt4 key购买 nike

我正在尝试使用函数 SHGetKnownFolderPath() 获取用户本地应用程序数据的目录并将 PWSTR(这是一个 wchar_t*)转换为 LPCSTR(这是一个 const char*),然后将程序添加到 LPCSTR以便它可以在 CreateProcess 中使用。

我想出了如何使用 SHGetKnownFolderPath 并使用 printf(%ls%, path) 将路径打印到控制台,并想出了如何使用 CreateProcess 来执行 .exe 文件,但我不知道如何将 PWSTR 变成一个 const char* 并将我要执行的程序包含到该 const char* 中。

#include <Windows.h>
#include <fstream>
#include <shlobj_core.h>
#include <string>
#include <KnownFolders.h>
#include <wchar.h>

int main () {
//SHGetKnownFolderPath function
PWSTR path = NULL;
HRESULT path_here = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path);

//CreateProcess funtion
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
const char* execute = //Want to have path_here plus another folder and an .exe program.
BOOL create = CreateProcess(execute, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo);
.......................
}

我不会说我对编码了解很多,可能还有一些重要的事情我还不知道。任何帮助将不胜感激。

编辑

我认为如果我展示我的代码的其他部分会更有帮助。以下代码紧接在我上面编写的代码之后:

if (create){
WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}

最佳答案

根本不要转换为 charSHGetKnownFolderPath() 返回一个 Unicode 字符串。显式使用 CreateProcessW() 以便您可以将 Unicode 字符串传递给它:

#include <Windows.h>
#include <fstream>
#include <shlobj_core.h>
#include <string>
#include <KnownFolders.h>
#include <wchar.h>

int main ()
{
PWSTR path = NULL;
HRESULT hres = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path);
if (SUCCEEDED(hres))
{
STARTUPINFOW info = { sizeof(STARTUPINFOW) };
PROCESS_INFORMATION processInfo;
std::wstring execute = std::wstring(path) + L"\\folder\\program.exe";
CoTaskMemFree(path);
BOOL create = CreateProcessW(&execute[0], NULL, NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo);
// ...
}
return 0;
}

关于c++ - 在 CreateProcess 的路径中使用 SHGetKnownFolderPath 来运行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com