You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下获取高权限运行程序的正确工作路径

任务计划最高权限运行时获取EXE正确路径的解决方法

问题核心:用cd命令获取的是当前工作目录,任务计划以最高权限运行时,默认工作目录是C:\Windows\System32,和EXE实际位置无关。要拿到EXE的真实路径,得直接读取进程的可执行文件路径,不能依赖工作目录。

解决方案:使用Windows API获取EXE路径

直接调用Windows原生API GetModuleFileName(),这个函数能获取当前进程可执行文件的完整路径,不受工作目录影响。步骤如下:

  1. 调用GetModuleFileName()获取带文件名的完整路径
  2. 从完整路径中剥离文件名,只保留目录部分
  3. 处理路径格式(确保末尾带反斜杠,和原代码需求一致)

修改后的代码

#include <windows.h>
#include <string.h>

bool get_path(Arg* arg)
{
    char full_path[MAX_PATH];
    DWORD path_len = GetModuleFileNameA(NULL, full_path, MAX_PATH);
    
    // 检查路径获取是否成功或是否超出缓冲区
    if (path_len == 0 || path_len >= MAX_PATH) {
        return 0;
    }

    // 找到最后一个反斜杠,剥离文件名部分
    char* last_backslash = strrchr(full_path, '\\');
    if (last_backslash == NULL) {
        return 0;
    }
    // 截断到目录位置,添加反斜杠和结束符
    *last_backslash = '\0';
    strcat(full_path, "\\");

    // 复制到目标缓冲区,检查长度是否足够
    size_t dir_len = strlen(full_path);
    if (dir_len >= sizeof(arg->workingdir)) {
        return 0;
    }
    strcpy(arg->workingdir, full_path);
    arg->workingdir_cnt = dir_len;

    return 1;
}

说明

  • GetModuleFileNameA(NULL, ...):传入NULL表示获取当前进程的可执行文件路径,A版本对应多字节字符集,和原代码的char数组兼容
  • strrchr():定位路径中最后一个反斜杠,以此截断去掉文件名
  • 最后手动添加反斜杠,和原代码的后续使用需求保持一致

这样不管是普通权限还是任务计划最高权限运行,都能稳定获取到EXE所在的真实目录。

内容的提问来源于stack exchange,提问作者Erz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:10:16