Windows WPF 程序自启动 .net 6 , 正确获取程序所在路径

前言:

  写了个WPF程序,然后想让它开机自启动,然后遇到了一些错误!

  此篇文章针对的是 windows 操作系统

谁开机启动了你的程序

  谁开机启动了你的程序呢?开始写“开机自启”代码时,查看了不少文章,最终确认 ,在注册表中添加信息,达到开机自启的目的,参考我的另一篇随笔。

  程序启动时,我需要获取程序所在目录,设置日志文本输出路径,设置 Sqlite 数据库创建的路径,想当然的第一使用方法就是  “Environment.CurrentDirectory”或者“Directory.GetCurrentDirectory()”获取当前目录路径。

  起先我一直挺怀疑自己水平,因为不精通CS端(主要干BS端)。

  错多之后,我慢慢发现一个现象,当我发布WPF win64到文件之后,手动双击可执行文件(.exe),一切正常运行,日志、数据库创建正常。突然产生一个想法,我把日志、数据库文件删除,然后看系统启动的程序能否创建。

  然后系统启动不了,通过记录日志发现“Environment.CurrentDirectory”或者“Directory.GetCurrentDirectory()”获取到的路径居然是“C:\WINDOWS\system32”,这么说,就是开机后win32启动的我这WPF客户端程序咯。

  也难怪获取到的环境变量下路径是“C:\WINDOWS\system32”。

  知道问题后,就好解决了。接下来需要解决的就是获取可执行程序运行时真正的目录

获取可执行程序运行时真正的目录

  没有什么难点,使用方式不正确。

查看代码

        public static string GetBaseDirectory()
        {
            return Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)!;
        }

        public static string GetExecutableFile()
        {
            return Path.Combine(GetBaseDirectory(), AppDomain.CurrentDomain.FriendlyName + ".exe");
        }

        public static string GetSqliteDbPath()
        {
            return Path.Combine(GetBaseDirectory(), "Db\\Practice.db");
        }

        public static string GetTxtLogsPath()
        {
            return Path.Combine(GetBaseDirectory(), "Logs\\Logs.txt");
        }

  我的源代码 

posted @ 2023-07-30 13:55  youliCC  阅读(350)  评论(0编辑  收藏  举报