gpt4 book ai didi

C++获取程序文件目录,附加额外路径并执行

转载 作者:行者123 更新时间:2023-11-28 03:34:29 25 4
gpt4 key购买 nike

我正在尝试编写几行简单的代码来获取 XP 和 Vista/7 上的“Program Files”目录路径(在 vista/7 上我需要 x86 文件夹的路径),添加一些额外的应用程序的路径并执行它。

这是我目前所拥有的,但它没有执行外部程序,也没有给出错误..

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;

我已经根据 hmjd 的建议更新了我的代码:

wchar_t localAppData[MAX_PATH];
STARTUPINFO sInfo = { sizeof(STARTUPINFO), NULL, L"winsta0\\default" };
PROCESS_INFORMATION pInfo;
SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, 0, NULL, localAppData);
std::wstringstream ss;
ss << localAppData << L"/PacificPoker/bin/888poker.exe";
std::wstring ss_str = ss.str();
wchar_t* path = new wchar_t[ss_str.length() + 1]();
std::copy(ss_str.begin(), ss_str.end(), path);
CreateProcess(path, NULL,NULL, NULL,FALSE,NULL,NULL,NULL,&sInfo,&pInfo);
delete[] path;
return GetLastError();

对于 GetLastError 仍然得到“3”,但我可以确认 C:\Program Files\MyApp\MyExe.exe 存在..

最佳答案

代码的一些问题:

  • sInfo没有初始化,你至少需要设置cb成员

    STARTUPINFO sInfo = { sizeof(STARTUPINFO),  // 'cb'
    NULL, // 'lpReserved'
    L"winsta0\\default" };// 'lpDesktop'

参见 STARTUPINFO了解更多详情。

  • CreateProcess() 的第一个参数应该是非常量,但正在传递给 c_str(),这将是一个 const 如果它不是一个悬挂指针ss.str() 方法返回一个 std::string,而 c_str() 返回一个指向该 std 的指针::string 但它是一个临时对象,在表达式 (;) 的末尾被销毁,使 str 成为悬空指针。更改为:

    std::wstring ss_str = ss.str();
    wchar_t* path = new wchar_t[ss_str.length() + 1]();
    std::copy(ss_str.begin(), ss_str.end(), path);
    CreateProcess(path, ...);
    delete[] path;

检查所有函数的返回值并查询 GetLastError() 以确定失败原因。

关于C++获取程序文件目录,附加额外路径并执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454036/

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