You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# .NET Framework程序设置开机启动时出现Access Denied错误求助

问题原因

  • 你代码中使用了相对路径读写txt文件,程序运行时会默认从进程工作目录拼接路径读取文件
  • 手动双击exe启动时,进程工作目录就是exe所在的文件夹,所以路径正确读写正常
  • 放入开机启动文件夹启动时,Windows默认给进程设置的工作目录是C:\Windows\system32,普通用户账户没有写入system32目录的权限,同时该目录下也没有你要读写的txt文件,因此抛出权限异常。

解决方案

优先级从高到低排列:

方案1:修改代码使用绝对路径(最稳妥,推荐)

在代码中拼接程序自身所在目录作为基准路径,不要依赖默认工作目录。.NET Framework中可以用AppDomain.CurrentDomain.BaseDirectory获取exe所在目录,示例代码:

// 原来的相对路径写法(错误)
// var content = File.ReadAllText("timeUsage.txt");

// 修正后的绝对路径写法
string exeDir = AppDomain.CurrentDomain.BaseDirectory;
string txtPath = Path.Combine(exeDir, "timeUsage.txt");
var content = File.ReadAllText(txtPath);

如果你的程序需要长期写入数据,更推荐把数据文件存到用户专属的可写目录,避免程序放在Program Files等系统保护目录时仍然有权限问题:

string appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string yourAppDir = Path.Combine(appDataDir, "你的程序名称");
// 先创建目录
if(!Directory.Exists(yourAppDir)) Directory.CreateDirectory(yourAppDir);
string txtPath = Path.Combine(yourAppDir, "timeUsage.txt");

方案2:修改开机启动快捷方式的工作目录(无需改代码,临时解决)

  1. 打开开机启动文件夹:C:\Users\[你的用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  2. 找到你程序的快捷方式,右键点击「属性」
  3. 在「快捷方式」选项卡中,找到「起始位置」输入框,填入你的exe实际所在的文件夹路径,点击确定即可。

方案3:补充异常处理优化体验

建议给所有文件读写逻辑包裹异常捕获,避免程序直接抛出未处理异常闪退:

try
{
    // 你的文件读写逻辑
}
catch (UnauthorizedAccessException ex)
{
    // 权限不足的处理逻辑,比如打日志、弹出友好提示
}
catch (IOException ex)
{
    // 文件读写其他异常处理
}

内容的提问来源于stack exchange,提问作者Liuk23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:51:04