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
相关产品推荐
相关产品推荐

