why to I get this error: System.UnauthorizedAccessException: 'C:\Windows\system32\CSV_file'

why to I get this error: System.UnauthorizedAccessException: 'C:\Windows\system32\CSV_file'

我用 C# 编写了代码。 代码正在登录以下文件:

  1. CPU 用法
  2. RAM 使用情况
  3. 网卡流量
  4. 当前时间

我希望在系统启动时自动执行代码。 所以我写了一个批处理文件,运行s .exe 文件是这样的:

START 'C:\Debug\DiagnisticTool.exe'

而 DiagnisticTool.exe 是应用程序,它包含在 C 盘名为 'Debug' 的文件夹中。 批处理文件位于 windows 启动文件夹中。

当我启动我的 PC 时,批处理文件 运行ning 出现了上述错误。 脚本代码中文件是这样写的:

using (StreamWriter outputFile = File.AppendText("PerformanceLogFile.csv"))
                {
                    outputFile.WriteLine(something to write to file);
                }

但错误表明它试图将其写入其他地方:'C:\Windows\system32'。

这是为什么?

当我通过 visual studio 或通过它创建的 .exe 应用程序 运行 程序时,它 运行 正常。 另外,当我 运行 手动批处理文件时,它工作正常。 唯一的问题是它在启动时没有运行。

发生这种情况是因为当您的程序被批处理调用时,当前文件夹不是您拥有可执行文件的文件夹,并且 windows 不关心将当前目录更改为您的文件夹。唯一重要的是您的程序的可用性,这是授予的,因为您提供了 START 命令的完整路径。

您可以通过更改 START 命令并指定程序所在的文件夹来解决问题 运行

START /D C:\Debug C:\Debug\DiagnisticTool.exe

或者在 运行 文件

之前添加 CD 命令
CD C:\DEBUG
START C:\DEBUG\DiagnosticTool.exe

或更改传递给 StreamWriter 的路径

using (StreamWriter outputFile = File.AppendText(@"C:\debug\PerformanceLogFile.csv"))

最后一个选项虽然允许您按原样保留批处理,但如果您想自定义输出文件夹,则可能会出现问题。例如,如果不允许在目标计算机上创建 C:\DEBUG 文件夹或出于其他原因。