首页 > 编程语言 >.NET C#程序启动闪退,在安装或者程序文件下能正常运行,但通过路径却无法运行

.NET C#程序启动闪退,在安装或者程序文件下能正常运行,但通过路径却无法运行

时间:2024-03-26 20:11:22浏览次数:31  
标签:文件 配置文件 C# 路径 程序 NET 目录 运行

.NET C#程序启动闪退,目录导致的问题

这是第2次踩这个坑了,很小的编程细节,容易忽略,所以写个博客,分享给大家。

1.第一次坑:是windows 系统把程序运行成服务,找不到配置文件,原因是以服务运行它的工作目录是在C:\Windows\System32

2.本次坑:WPF桌面程序通过注册表设置开机自启,开机启动就闪退

我的排查流程:

1.使用注册表中配置的绝对路径,直接进入该文件夹中双击运行,验证程序和路径正确性,结果:失败。但管理员却能运行。原因是inno setup打包的时候设置了需要管理员运行。于是重新打包。虽然直接双击可以运行,但开机自启依然不行

2.于是我换了一个方式,在文件夹管理器直接使用绝对路径访问运行,结果:失败。当时怀疑,问题依然是:权限或者打包软件问题,但经过反复验证是正常的,于是问了一下gpt,他给了一个方向:(应用程序依赖资源文件路径问题: 如您的应用程序在运行时依赖于某些资源文件(如配置文件、数据库文件、dll等)。我当时想都能正常运行肯定没问题,但大脑还是抱着质疑的态度在脑海里面扫描一遍可能出现路径暗坑的代码,然后灵感一闪,想起来我的配置文件读取只写了一个文件名,原因也是程序工作目录导致的,然后进行代码修正,完美解决

原因

如果您通过某个路径间接启动程序(例如通过快捷方式、命令行指定的目录或是其他方式),这时当前工作目录可能不再是程序本身的目录,而是变成了启动程序的所在目录或者是命令行指定的工作目录,这就可能导致程序无法找到(如配置文件、数据库文件、dll等) 文件

解决方案

Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "文件名.json")

 所以大家编程的时候操作文件资源相关代码路径推荐这种写法,避免通过其他方式启动的时候程序崩溃。除非你希望你的文件资源在工作目录下操作,但这样会导致不可控,不建议

标签:文件,配置文件,C#,路径,程序,NET,目录,运行
From: https://www.cnblogs.com/Bob-luo/p/18097463

相关文章

  • 【Reflect】 2 获取运行时类的结构
    通过反射获取运行时类的完整结构Field、Method、Constructor、Superclass、Interface、Annotation实现的全部接口所继承的父类全部的构造器全部的方法全部的属性实现的全部接口publicClass<?>[]getInterfaces():确定此对象所表示的类或接口实现的接口。所继承的父类publ......
  • Flink Native Kubernetes实战,索引为什么能提供查询性能
    关于FlinkNativeKubernetes先对比官方的1.9和1.10版本文档,如下图和红框和蓝框所示,可见FlinkNativeKubernetes是1.10版本才有的新功能:看看NativeKubernetes是如何运行的,如下图,创建sessioncluster的命令来自Flink安装包:更有趣的是,提交任务的命令也来自Flink安装包,......
  • (离线RAG、chatGLM3-6B)安装了fastchat:0.2.36,仍报错ModuleNotFoundError: No module nam
           在离线知识库服务(Langchain-Chatchat)本地搭建时,虽然在虚拟环境中安装了fastchat:0.2.36,但在运行时,仍报错ModuleNotFoundError:Nomodulenamed'fastchat.protocol'。              经过在网上查询,发现部署成功的案例采用的0.2.34版本的fast......
  • 蓝桥杯 试题 基础练习 十进制转十六进制 C++
    问题描述十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制......
  • Docker搭建LNMP环境实战(05):CentOS环境安装Docker-CE
    前面几篇文章讲了那么多似乎和Docker无关的实战操作,本篇总算开始说到Docker了。1、关于Docker1.1、什么是DockerDocker概念就是大概了解一下就可以,还是引用一下百度百科吧:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然......
  • C++的format函数
    C++20引入了<format>库,它提供了类似于Python的格式化字符串的功能。你可以使用std::format函数来格式化字符串。format   格式控制标记  [[fill]align][sign][#][0][wigth][precision][type]下面依次讲解format的格式控制标记的基本用法:1.[[fill]align]这个格式......
  • 分享一个DuiLib VSCode UI预览插件
    本插件能够在VSCode上预览DuiLib的XML文件,这样用VSCode编写UI就很方便了我公司的Windows客户端UI是基于DuiLib的,平时在写UI的过程中,经常需要频繁打开客户端来看查看样式,对我来说就很不方便。我一般用VSCode来写XML,某一天前端同事分享了一个他自己开发的VSCode插件,我就在想,......
  • 使用 Amazon Bedrock + Claude 3 打造个性化智能编程助手
    最近,随着人工智能技术的迅速发展,代码助手已经成为软件开发领域备受关注的工具。像AmazonCodeWhisperer和GithubCopilot这样的工具可以在集成开发环境中帮助用户自动生成代码,极大地提高了开发效率。然而,这些助手通常缺乏直接执行代码的能力,需要额外集成开发环境来执行代码。......
  • P2850 [USACO06DEC] Wormholes G
    原题链接题解1.虫洞等价于建立负权边2.回到过去等价于存在负权环这里就相当于检测是否存在负权环,怎么判定呢?广搜,对于任意不含有负权环的,任意两点间的点数一定小于n如果存在负权环,那么搜索会一直沿着这个环进行下去,其路径的点数会大于ncode#include<bits/stdc++.h>usingna......
  • 使用 GoAccess 分析 Nginx 日志
    来源:https://cloud.tencent.com/developer/article/1449085 GoAccess是一款开源的且具有交互视图界面的实时Web日志分析工具,通过你的Web浏览器或者*nix系统下的终端程序(Terminal)即可访问。GoAccess能为系统管理员提供快速且有价值的HTTP访问统计,并以在线可视化......