【发布时间】:2020-03-22 11:29:03
【问题描述】:
我用 C# 编写了一个代码。 该代码正在登录到以下文件:
- CPU 使用率
- 内存使用情况
- 网卡流量
- 当前时间
我希望在系统启动时自动执行代码。 所以我写了一个批处理文件,像这样运行 .exe 文件:
START 'C:\Debug\DiagnisticTool.exe'
而 DiagnisticTool.exe 是应用程序,它包含在 C 盘名为“Debug”的文件夹中。 批处理文件位于 windows 启动文件夹中。
当我启动我的电脑时,批处理文件正在运行,然后出现上述错误。 这是脚本代码中文件的编写方式:
using (StreamWriter outputFile = File.AppendText("PerformanceLogFile.csv"))
{
outputFile.WriteLine(something to write to file);
}
但错误表明它试图在其他地方编写它:'C:\Windows\system32'。
为什么会这样?
当我通过 Visual Studio 或它创建的 .exe 应用程序运行程序时,它运行正常。 另外,当我手动运行批处理文件时,它工作正常。 唯一的问题是它在启动时没有按应有的方式运行。
【问题讨论】:
-
指定该文件的完整路径,而不仅仅是其名称。 CurrentDirectory 将会改变。
-
Windows 和
cmd.exe不将单引号视为特殊字符;您可以在文件名中使用它们。所以在这种情况下,您应该使用START C:\Debug\DiagnisticTool.exe或更好的START "" "C:\Debug\DiagnisticTool.exe",(空的双引号可以用您选择的标题填充)。 -
如果您需要可执行文件以特定目录作为当前目录运行,该目录与当前定义的目录不同,您必须首先使用
CD /D "C:\Debug"或PushD "C:\Debug"更改该目录或使用Start的/D选项Start /D "C:\Debug" "C:\Debug\DiagnisticTool.exe"定义它。要了解每个命令的工作原理,您可以打开命令提示符窗口并输入start /?、cd /?、pushd /?等。从上面可以看出,最好的做法是双引号文件名,无论是相对的还是绝对的。 -
此外,您应该添加到启动目录的唯一文件应该是快捷方式。在这种情况下,您应该为批处理文件添加快捷方式,而不是批处理文件本身。因此值得注意的是,对于您在问题中暗示的任务,您根本不需要批处理文件,您只需在启动目录中放置
C:\Debug\DiagnisticTool.exe的快捷方式即可。在该快捷方式的属性中,如有必要,您可以包含任何其他选项/参数,以及“开始于”目录。 -
除上述之外,我的建议是在 C# 代码本身中使用输出/附加文件的完整路径,然后在启动目录中放置该 C# 的快捷方式,as在我之前的评论中建议。最后,您知道您命名的可执行文件拼写错误,它应该是
Diagnostic而不是Diagnistic。
标签: c# batch-file startup unauthorizedaccessexcepti system32