使用任务计划程序运行程序时的相对路径问题

问题描述 投票:0回答:1

我正在尝试使用 Windows 10 任务计划程序在登录后运行 MFC 应用程序。

就执行而言没有问题,但我在使用相对路径读取文件时遇到问题。

任务计划程序执行与正常执行有什么不同吗?

或者,有没有另一种解决方案可以在

Eshell.exe
shell 中设置启动路径?

例如:

CIniFile OptionINI(_T(".\\userOption.ini"), 1024);
// File not found

CIniFile OptionINI(_T("c:\\my\\userOption.ini"), 1024);
// File found successfully
c++ mfc
1个回答
0
投票

相对路径是一种便利的配置,但却带来了损害。它们与“当前目录”相关,这是一个几乎无法控制的每个进程的属性。任何线程都可以随时更改它,并且多个系统服务会顺便更改它(例如,默认配置中的某些文件对话框)。 避免相对路径并始终使用完全限定的路径名。

这里的具体问题是,通过任务计划程序添加的任务将当前目录设置为通常不是可执行文件所在目录的目录。这是可以调整的,如果您无法更改要启动的可执行文件的代码(例如,请参阅

此超级用户问答

)。 这不会产生可靠的解决方案。依赖当前目录的代码几乎总是错误的,存在安全隐患。如果您可以更改代码,则应该这样做。始终为库和系统服务提供完全限定的路径名。

要构造相对于执行模块目录的完全限定路径名,请执行以下操作:

检索执行模块的完全限定路径名 (
  • GetModuleFileNameW()
    )
    剥离文件部分(
  • PathCchRemoveFileSpec()
    )
    添加反斜杠,后跟指定的文件名(例如
  • "userOption.ini"
  • 
    
  • 这会产生完全限定的路径名,其含义不受外部状态(例如当前目录)的影响。

© www.soinside.com 2019 - 2024. All rights reserved.