почему я получаю эту ошибку: System.UnauthorizedAccessException: 'C: \ Windows \ system32 \ CSV_file' - PullRequest
0 голосов
/ 22 марта 2020

Я написал код в C#. Код регистрируется в файле следующим образом:

  1. Загрузка ЦП
  2. Использование ОЗУ
  3. Трафик сетевой карты c
  4. Текущее время

Я хочу, чтобы при запуске системы код выполнялся автоматически. Итак, я написал командный файл, который запускает файл .exe, например:

START 'C:\Debug\DiagnisticTool.exe'

, в то время как DiagnisticTool.exe является приложением, и он содержится в папке с именем «Debug» на диске C. Пакетный файл находится в папке запуска windows.

Когда я запускаю P C, пакетный файл работает, и появляется ошибка, указанная выше. Вот как файл был записан в коде скрипта:

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

, но ошибка указывает, что он пытается записать его где-то еще: 'C: \ Windows \ system32'.

Почему это так?

Когда я запускаю программу через visual studio или через приложение .exe, которое она создала, она работает нормально. Плюс, когда я запускаю командный файл вручную, он работает нормально. ЕДИНСТВЕННАЯ проблема заключается в том, что он не запускается при запуске, как следует.

1 Ответ

0 голосов
/ 22 марта 2020

Это происходит потому, что когда ваша программа вызывается из пакета, текущая папка не является той, в которой у вас есть исполняемый файл, и 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 на целевом компьютере или по какой-либо другой причине.

...