.NET C#程序启动闪退,目次导致的标题
这是第2次踩这个坑了,很小的编程细节,轻易忽略,所以写个博客,分享给大家。
1.第一次坑:是windows 体系把程序运行成服务,找不到配置文件,缘故原由是以服务运行它的工作目次是在C:\Windows\System32
2.本次坑:WPF桌面程序通过注册表设置开机自启,开机启动就闪退
我的排查流程:
1.使用注册表中配置的绝对路径,直接进入该文件夹中双击运行,验证程序和路径正确性,结果:失败。但管理员却能运行。缘故原由是inno setup打包的时候设置了需要管理员运行。于是重新打包。虽然直接双击可以运行,但开机自启依然不行
2.于是我换了一个方式,在文件夹管理器直接使用绝对路径访问运行,结果:失败。当时怀疑,标题依然是:权限或者打包软件标题,但经过反复验证是正常的,于是问了一下gpt,他给了一个方向:(应用程序依靠资源文件路径标题: 如您的应用程序在运行时依靠于某些资源文件(如配置文件、数据库文件、dll等)。我当时想都能正常运行肯定没标题,但大脑还是抱着质疑的态度在脑海里面扫描一遍可能出现路径暗坑的代码,然后灵感一闪,想起来我的配置文件读取只写了一个文件名,缘故原由也是程序工作目次导致的,然后进行代码修正,完美解决
缘故原由
如果您通过某个路径间接启动程序(例如通过快捷方式、命令行指定的目次或是其他方式),这时当前工作目次可能不再是程序本身的目次,而是变成了启动程序的所在目次或者是命令行指定的工作目次,这就可能导致程序无法找到(如配置文件、数据库文件、dll等) 文件
解决方案
- Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "文件名.json")
复制代码 所以大家编程的时候操作文件资源干系代码路径保举这种写法,避免通过其他方式启动的时候程序崩溃。除非你希望你的文件资源在工作目次下操作,但这样会导致不可控,不建议
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |