using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;
using Microsoft.Win32;using System.IO;
namespace WindowsFormsApp1{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();           // Class1.test();           // Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;        }
       private void button1_Click(object sender, EventArgs e)        {            MessageBox.Show("软件自启动");
           String LogPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log");            MessageBox.Show(Environment.CurrentDirectory+"\n"+LogPath);
           //Class1.test();        }
       private void Form1_Load(object sender, EventArgs e)        {            AutoStart();        }
       private void AutoStart(bool isAuto = true, bool showinfo = true)        {            try            {                if (isAuto == true)                {                    RegistryKey R_local = Registry.CurrentUser;//RegistryKey R_local = Registry.CurrentUser;                    RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");                    R_run.SetValue("应用名称", Application.ExecutablePath);                    R_run.Close();                    R_local.Close();                }                else                {                    RegistryKey R_local = Registry.CurrentUser;//RegistryKey R_local = Registry.CurrentUser;                    RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");                    R_run.DeleteValue("应用名称", false);                    R_run.Close();                    R_local.Close();                }            }

           // if (showinfo)            //      MessageBox.Show("您需要管理员权限修改", "提示");            // Console.WriteLine("您需要管理员权限修改");            catch (Exception ex)            {                String LogPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log");                if (!Directory.Exists(LogPath))                    Directory.CreateDirectory(LogPath);                if (!File.Exists(LogPath + "\\log.txt"))                    File.Create(LogPath + "\\log.txt").Close();                string fileName = LogPath + "\\log.txt";                string content = DateTime.Now.ToLocalTime() + " 0001_" + "您需要管理员权限修改" + "\n" + ex.StackTrace + "\r\n";                Logger(fileName, content);
           }
       }        public static void  disPlay(string path)        {
           MessageBox.Show(path);        }        public  void Logger(string fileName, string content)        {
           using (StreamWriter sw = new StreamWriter(fileName, true))            {                sw.Write(content);                sw.Close(); sw.Dispose();            }        }    }}

运行后点击按钮:

C# 软件开机启动_java

,然后重启后点击按钮:

C# 软件开机启动_java_02

发现没?开机自动启动后

Environment.CurrentDirectory 发生了变更

这样在在我们程序中原本如果使用相对路径进行处理的,就找不见相应的文件了,

怎么处理?

方法1:

在程序初始化的时候改变下当前路径

 public Form1()        {            InitializeComponent();           Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;        }

方法2:添加环境变量 , 计算行--属性--高级系统设置--环境变量--系统变量里面设置.