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

Use SHGetKnownFolderPath in path of CreateProcess to run program

本文关键字:SHGetKnownFolderPath 运行 程序 CreateProcess 路径      更新时间:2023-10-16

我正在尝试使用函数SHGetKnownFolderPath((,该函数获取用户的localappdata的目录并将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;
}
相关文章:
  • 没有找到相关文章