首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateProcessA %appdata%

CreateProcessA %appdata%
EN

Stack Overflow用户
提问于 2018-05-21 20:43:52
回答 2查看 686关注 0票数 0

我试图使用CreateProcessA调用%appdata%目录下的应用程序。

例如,使用以下内容:

代码语言:javascript
复制
CreateProcessA(
    NULL, "%appdata%\myfile.exe", NULL, NULL, FALSE,
    CREATE_NO_WINDOW, NULL, NULL, &sI, &pI
);

调用myfile.exe时是否需要使用完整的路径,还是在调用CreateProcessA时可以使用%appdata%

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-21 21:08:35

正如MSDN中所述,由于您将NULL作为第一个参数传递给CreateProcessACreateProcessA的第二个参数:lpApplicationName正在扮演要执行的命令行的角色。除非lpApplicationName指向目录中的exe,否则系统将按以下顺序查找。

  1. 从其中加载应用程序的目录。
  2. 父进程的当前目录。
  3. 32位Windows系统目录。使用GetSystemDirectory函数获取该目录的路径
  4. 16位Windows系统目录。没有获得此目录的路径的函数,但会搜索它。这个目录的名称是System。Windows目录。使用GetWindowsDirectory函数获取此目录的路径。
  5. PATH环境变量中列出的目录。请注意,此函数不搜索应用程序路径注册表项指定的每个应用程序路径。若要在搜索序列中包含此每个应用程序路径,请使用ShellExecute函数。

因此,除非CreateProcessA的第二个参数以{directory}/{executable_name}.{ext}形式存在,否则您将不得不这样做:

  1. 将executable_name放在加载应用程序的同一目录中。
  2. 将executable_name放在父进程的同一个目录中。
  3. 将executable_name放在System32目录中: C:\ Windows \System32 32
  4. 将executable_name放在Windows目录中: C:\Windows
  5. 包括路径中executable_name所在的目录

如Ben所述,请查看ExpandEnvironmentStrings以修改PATH env变量。

票数 1
EN

Stack Overflow用户

发布于 2018-05-22 02:01:50

CreateProcess中的第二个参数应该是可写缓冲区。如果可执行路径不包括命令行参数,则将可执行路径放在第一个参数中,并保留第二个参数NULL

对于Windows及以上版本,请使用SHGetKnownFolderPath

FOLDERID_LocalAppData返回"c:\\users\\username\\AppData\\Local"

FOLDERID_RoamingAppData返回"c:\\users\\username\\AppData\\Roaming"

ExpandEnvironmentStrings("%APPDATA%", ...)返回与FOLDERID_RoamingAppData相同的内容

除非您确信用户名与ANSI兼容,否则应该使用Unicode。

代码语言:javascript
复制
wchar_t *ptr;
if(S_OK == SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, NULL, &ptr))
{
    //or FOLDERID_LocalAppData
    std::wstring path = ptr;
    CoTaskMemFree(ptr);

    STARTUPINFOW si = { sizeof(si) };
    PROCESS_INFORMATION pi;
    path += L"\\myfile.exe";
    CreateProcessW(NULL, &path[0], NULL, NULL, FALSE, 
            CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50456382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档