为什么出现此错误:System.UnauthorizedAccessException:'C:\ Windows \ system32 \ CSV_file'

问题描述 投票:0回答:1

我已经用C#编写了代码。该代码将登录到以下文件:

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

我希望在系统启动时自动执行代码。因此,我编写了一个运行.exe文件的批处理文件,如下所示:

START 'C:\Debug\DiagnisticTool.exe'

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

启动PC时,批处理文件正在运行,然后出现上述错误。这是用脚本代码编写文件的方式:

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

但是该错误表明它尝试将其写到其他位置:'C:\ Windows \ system32'。

为什么?

当我通过Visual Studio或它创建的.exe应用程序运行该程序时,运行正常。另外,当我手动运行批处理文件时,它可以正常工作。唯一的问题是,它不会在启动时正常运行。

c# batch-file startup unauthorizedaccessexcepti system32
1个回答
0
投票

之所以这样,是因为当批处理程序调用您的程序时,当前文件夹不是您拥有可执行文件的文件夹,而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文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.