关于c#程序使用注册表设置开机自启后不能读取指定配置文件的问题

疯一样的男子
疯一样的男子
发布于 2021-08-12 / 1 阅读
0
0

关于c#程序使用注册表设置开机自启后不能读取指定配置文件的问题

把一个窗体程序设置开机自启后,程序开机自启读取的不是我指定位置的config.ini,我指定的是读取启动程序同级目录下的config.ini,它读取的却是C盘system32里的config.ini(我并没有在c盘创建config.ini),而且我手动启动程序或者在调试时,程序能正确读取程序同级目录下的config.ini

开机自启读取文件时使用Environment.CurrentDirectory或使用相对路径可能导致目录指向C盘System文件夹

如果要获取程序根目录,推荐使用Application.StartupPath,可以获得应用程序运行所在的目录,其值等于应用程序启动的根目录

解决办法其实就是把加载文件的路径方法改为用System.Windows.Forms.Application.StartupPath 获取可以保证自启动时一致

1-jjry.png

问题原因(我也没完全看懂):

来源:System.IO.Directory.GetCurrentDirectory与System.Windows.Forms.Application.StartupPath的用法

.Net Framework中System.IO.Directory.GetCurrentDirectory()方法用于获得应用程序当前工作目录。如果使用此方法获得应用程序所在的目录,应该注意:System.IO.Directory.GetCurrentDirectory()方法获得的目录路径随着OpenFileDialog、SaveFileDialog等对象所确定的目录而改变(切换工作目录)。每打开一次文件夹或者使用资源管理器查看一下文件,都会更改此方法获得的值。

而System.Windows.Forms.Application.StartupPath或System.AppDomain.CurrentDomain.BaseDirectory可以获得应用程序运行所在的目录,它是不随你打开的文件夹而变的。只跟应用程序运行目录有关,其值等于应用程序启动的根目录。例如你安装了程序在了C:\Program Files\程序文件夹 的位置下,那么他就是System.Windows.Forms.Application.StartupPath的值。


评论