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

Delphi程序通过注册表自启动后工作目录变为C:\Windows\System32问题咨询

问题原因

Windows注册表Run项启动程序时,不会自动将程序所在目录设置为工作目录,默认使用系统目录C:\Windows\System32作为工作目录,属于系统默认行为。

最优解决方案:程序启动时主动切换工作目录

这个方案兼容性最好,不管程序是通过注册表自启、手动双击启动还是其他方式触发,都能保证工作目录正确,只需要在程序初始化阶段添加一行代码即可:

// 可放在工程入口代码的开头,或者主窗体的OnCreate事件中
SetCurrentDir(ExtractFilePath(Application.ExeName));

备选方案:修改注册表写入规则(不推荐)

如果你不想修改程序代码,也可以在写入注册表时通过cmd中转指定工作目录,但会出现短暂的cmd黑框,体验较差,修改后的注册表值格式如下:

cmd /c "cd /d C:\temp && start SomeRandomAppIWantToRun.exe"

现有代码优化建议

你目前通过调用GetDosOutput执行系统reg命令操作注册表的实现逻辑可以优化,直接使用Delphi自带的TRegistry类的原生方法操作注册表即可,无需调用外部命令,降低权限冲突概率:

  • 写入注册表值直接调用WriteString方法
  • 删除注册表值直接调用DeleteValue方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:03