Баг возникает после нескольких компиляций. Лечится только убийством процесса pabcnetc.exe или перезапуском PascalABC.Net
P.S. Возможно это происходит из-за того, что оболочка пытается запустить программу еще до окончания компиляции
Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.
************** Текст исключения **************
System.ComponentModel.Win32Exception (0x80004005): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом
в System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
в System.Diagnostics.Process.Start()
в VisualPascalABC.Utils.ProcessRunner.Start(String command, String arguments, Boolean redirectIO, Boolean redirectErrors, Boolean RunWithPause, Boolean attachDebugger, Boolean fictive_attach)
в VisualPascalABC.RunManager.Run(String fileName, String args, Boolean redirectIO, Boolean redirectErrors, Boolean RunWithPause, String WorkingDirectory, Boolean attachDebugger, Boolean fictive_attach)
в VisualPascalABC.RunManager.Run(String fileName, Boolean redirectIO, String ModeName, Boolean RunWithPause, String WorkingDirectory, String CommandLineArguments, Boolean attachDebugger, Boolean fictive_attach)
в VisualPascalABC.WorkbenchRunService.Run(ICodeFileDocument tabPage, Boolean forDebugging, Boolean startWithGoto, Boolean needFirstBreakpoint)
в VisualPascalABC.WorkbenchRunService.Run(Boolean Debug)
в VisualPascalABC.Form1.StartMenuItem_Click(Object sender, EventArgs e)
в System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
в System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
в System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
в System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
в System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.ToolStrip.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Загруженные сборки **************
mscorlib
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
PascalABCNET
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/PascalABCNET.exe
----------------------------------------
System
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
PluginsSupport
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/PluginsSupport.DLL
----------------------------------------
CompilerTools
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/CompilerTools.DLL
----------------------------------------
WeifenLuo.WinFormsUI.Docking
Версия сборки: 2.2.5489.36547
Версия Win32: 2.2.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/WeifenLuo.WinFormsUI.Docking.DLL
----------------------------------------
Compiler
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/Compiler.DLL
----------------------------------------
Localization
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/Localization.DLL
----------------------------------------
System.Configuration
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Windows.Forms.resources
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------
ICSharpCode.TextEditor
Версия сборки: 0.0.0.0
Версия Win32: 0.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.TextEditor.DLL
----------------------------------------
ParserTools
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/ParserTools.DLL
----------------------------------------
CodeCompletion
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/CodeCompletion.DLL
----------------------------------------
Accessibility
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Accessibility/v4.0_4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
Errors
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/Errors.DLL
----------------------------------------
SyntaxTree
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/SyntaxTree.DLL
----------------------------------------
ICSharpCode.SharpDevelop
Версия сборки: 4.2.1.0
Версия Win32: 4.2.1.0
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.SharpDevelop.DLL
----------------------------------------
ICSharpCode.Core
Версия сборки: 4.2.1.0
Версия Win32: 4.2.1.0
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.Core.DLL
----------------------------------------
ICSharpCode.SharpDevelop.Dom
Версия сборки: 4.2.1.8805
Версия Win32: 4.2.1.8805
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.SharpDevelop.Dom.DLL
----------------------------------------
ICSharpCode.NRefactory
Версия сборки: 4.2.1.8805
Версия Win32: 4.2.1.8805
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.NRefactory.DLL
----------------------------------------
ICSharpCode.AvalonEdit
Версия сборки: 4.2.1.8805
Версия Win32: 4.2.1.8805
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.AvalonEdit.DLL
----------------------------------------
ICSharpCode.Core.Presentation
Версия сборки: 4.2.1.0
Версия Win32: 4.2.1.0
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.Core.Presentation.DLL
----------------------------------------
ICSharpCode.SharpDevelop.Widgets
Версия сборки: 4.2.1.8805
Версия Win32: 4.2.1.8805
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.SharpDevelop.Widgets.DLL
----------------------------------------
ICSharpCode.Core.WinForms
Версия сборки: 4.2.1.0
Версия Win32: 4.2.1.0
CodeBase: file:///D:/Ilya/PascalABC.NET/ICSharpCode.Core.WinForms.DLL
----------------------------------------
System.Design
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Design/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Design.dll
----------------------------------------
Debugger.Core
Версия сборки: 3.0.0.2649
Версия Win32: 3.0.0.2649
CodeBase: file:///D:/Ilya/PascalABC.NET/Debugger.Core.DLL
----------------------------------------
System.Data
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
TreeConverter
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/TreeConverter.DLL
----------------------------------------
NETGenerator
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/NETGenerator.DLL
----------------------------------------
SyntaxTreeConverters
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/SyntaxTreeConverters.DLL
----------------------------------------
SemanticTree
Версия сборки: 3.2.0.1318
Версия Win32: 3.2.0.1318
CodeBase: file:///D:/Ilya/PascalABC.NET/SemanticTree.DLL
----------------------------------------
System.Numerics
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
----------------------------------------
PascalABCParser
Версия сборки: 0.0.0.0
Версия Win32: 0.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/PascalABCParser.DLL
----------------------------------------
StandardSyntaxTreeConverter
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/StandardSyntaxTreeConverter.DLL
----------------------------------------
YieldConversionSyntax
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/YieldConversionSyntax.DLL
----------------------------------------
OptimizerConversion
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/OptimizerConversion.DLL
----------------------------------------
mscorlib.resources
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ru_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
SyntaxVisitors
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/SyntaxVisitors.DLL
----------------------------------------
YieldHelpers
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///D:/Ilya/PascalABC.NET/YieldHelpers.DLL
----------------------------------------
System.Security
Версия сборки: 4.0.0.0
Версия Win32: 4.6.1055.0 built by: NETFXREL2
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Security/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Security.dll
----------------------------------------
************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.
Например:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
При включенной отладке JIT любое необрабатываемое исключение
пересылается отладчику JIT, зарегистрированному на данном компьютере,
вместо того чтобы обрабатываться данным диалоговым окном.
Приложения написанные на Free Pascal могут генерировать ошибку времени выполнения (Run Time Error) когда в программе обнаруживаются определённые аварийные состояния . Этот документ содержит список возможных ошибок и описание их возможных причин.
1 Invalid function number (Неправильный номер функции)
Была попытка неправильного вызова системной функции.
2 File not found (Файл не найден)
Генерируется при попытке перенаименования, стирания или открытия несуществующего файла.
3 Path not found (Путь(директория) не найден)
Генерируется файловой системой когда путь не существует или неправелен.
Также генерируется при попытке получить доступ к несуществующему файлу.
4 Too many open files (Слишком много файлов открыто)
Максимальное число открытых файлов для вашего процесса было превышено.
Большинство операционных систем ограничивают максимальное число открытых файлов,
и эта ошибка может возникнуть когда этот лимит превышен.
5 File access denied (В доступе к файлу — отказано)
Было запрешено получение доступа к файлу. Эта ошибка может произойти по нескольким причинам:
-
При попытке открыть файл, предназначенный только для чтения или в деиствительности являющиёся директорией, для записи.
-
В данный момент занят или заблокирован другим процессом.
-
При попытке создания файла или директории с именем, которое совпадает с именем уже созданного файла или директории.
-
При попытке чтения из файла, открытого только для записи.
-
При попытке записи в файл, открытый только для чтения.
-
При попытке удалить директорию или файл, когда это не возможно.
-
При неимении прав на доступ к данному файлу.
6 Invalid file handle (Неправильный хэндл файла)
Происходит, когда используемая Вами файловая переменная была обнулена (испорчена); Это говорит о том, что память вашей программы была повреждена.
12 Invalid file access code (Неправильные ключи доступа к файлу)
Генерируется когда процедуры reset или rewrite вызываются с неправильным параметром FileMode.
15 Invalid drive number (Неправильный номер диска)
Генерируется когда в функции Getdir или ChDir был передан неправильный номер диска.
16 Cannot remove current directory (Невозможно удалить текущую директорию)
Генерируется при попытке удалить текущую директорию.
17 Cannot rename across drives (Можно переименовывать файлы только в пределах одного диска)
Вы не можете переименовать файл в файл, находяшиёся на другом диске или в другом разделе.
100 Disk read error (Ошибка чтения с диска)
Генерируется при невозможности произвести чтение с диска. Обычно происходит при попытке чтения данных, после его окончания.
101 Disk write error (Ошибка записи на диск)
Генерируется когда Вы пытаетесь записать данные на переполненый диск.
102 File not assigned (Файл не определён)
Генерируется функциями Reset, Rewrite, Append, Rename и Erase, При передаче в них файловой переменной, для которой не была выполнена функция AssignFile.
103 File not open (Файл не открыт)
Генерируется следующими функциями : Close, Read, Write, Seek, EOf, FilePos, FileSize, Flush, BlockRead, и BlockWrite если файл не был открыт.
104 File not open for input (Файл не открыт для чтения)
Генерируется функциями Read, BlockRead, Eof, Eoln, SeekEof и SeekEoln если файл не был открыт при помощи Reset.
105 File not open for output (Файл не открыт для записи)
Генерируется функцией write если текстовый файл не был открыт при помощи Rewrite.
106 Invalid numeric format(Неправильный числовой формат)
Генерируется когда ожидалось числовое значение, но из текстого файла было прочитано не было.
150 Disk is write-protected (Диск защищён от записи)
(Критическая ошибка)
151 Bad drive request struct length (Неправильная длина структуры запроса)
(Критическая ошибка)
152 Drive not ready (Устройство не готово)
(Критическая ошибка)
154 CRC error in data (Ошибка контрольной суммы в данных)
(Критическая ошибка)
156 Disk seek error (Ошибка низкоуровнего поиска на диске)
(Критическая ошибка)
157 Unknown media type (Неизвестный тип …)
(Критическая ошибка)
158 Sector Not Found (Сектор не найден)
(Критическая ошибка)
159 Printer out of paper (Нет бумаги в принтере)
(Критическая ошибка)
160 Device write fault (Сбой записи устройства)
(Критическая ошибка)
161 Device read fault (Сбой чтения устройства)
(Критическая ошибка)
162 Hardware failure (Сбой железа)
(Критическая ошибка)
200 Division by zero (Деление на ноль)
Приложение пыталось разделить число на ноль.
201 Range check error (Ошибка проверки границ)
Если вы компилировали прогамму с включённой провереой границ, Вы можете получить эту ошибку в следующих случаях:
-
Массив был вызван с индексом, выходящим за декларированые пределы.
-
Попытка присвоить значение переменной, выходящее за декларированые границы (для instance и enumerated типов).
202 Stack overflow error (Переполнение стека)
Стек превысил свой максимально допустимый размер (в этом случае необходимо уменьшить размер локальных переменных), или стек был повреждён. Эта ошибка генерируется только с включённой проверкой стека.
203 Heap overflow error (Переполнение кучи)
Размер кучи превысил максимально возможный размер. Генерируется при попытке выделить память непосредственно функциями New, GetMem и ReallocMem, или когда экземпляр класса или объекта создаётся и памяти не достаточно. Пожалуйста учтите что, по умолчанию, Free Pascal поддерживает увеличение кучи, то есть, если необходимо, будет произведена попытка её увеличения. Как бы то ни было, если размер кучи превысил максимально допустимый системой и
железом, то Вы получите эту ошибку.
204 Invalid pointer operation (Непрваильная операция с указателем)
Будет сгенерирована при вызове функций Dispose или Freemem с неправильным указателем (чаще всего, Nil)
205 Floating point overflow (Максимальная границы числа с плавающей точкой)
Вы попытались использовать или создать слишком большое число с плавающей точкой.
206 Floating point underflow (Минимальная граница числа с плавающей точкой)
Вы попытались использовать или создать слишком маленькое число с плавающей точкой.
207 Invalid floating point operation (Неправильная операция над числами с плавающей точкой)
Может генерироваться если вы попытались получить квадратный корень или логарифм отрицательного числа.
210 Object not initialized (Объект не инициализирован)
Если программа была скомпилирована с включенной проверкой границ, эта ошибка будет сгенерирована при попытке вызвать виртуальный метод до его конструктора.
211 Call to abstract method (Попытка вызова абстрактного метода)
Ваша программа попыталась вызвать абстрактный виртуальный метод. Абстрактные методы должны быть перекрыты, и только перекрытый метод должен быть вызван.
212 Stream registration error (Ошибка регистрации потока)
Генерируется когда неправильный тип регистрируется в модуле objects.
213 Collection index out of range (Индекс элемента коллекции выходит за допустимые границы)
Генерируется когда Вы попытались обратиться к элементу коллекции с выходящим за допустимые границы индексом (модуль objects).
214 Collection overflow error (Переполнение коллекции)
Размер коллекции превысил максимально допустимый размер, а Вы попытались добавить новый элемент (модуль objects).
215 Arithmetic overflow error (Арифметическое переполнение)
Эта ошибка генерируется когда результат операции превысил допустимые границы. В отличие to Turbo Pascal, эта ошибка генерируется только для 32-bit и 64-bit арифметических переполнений. Это происходит согласно тому, что все операнды конвертируются в 32-bit или 64-bit, до того как производить вычисления.
216 General Protection fault (GP Ошибка защиты памяти)
Приложение попыталось обратиться к недопустимому участку памяти. Это может быть вызвано следующими причинами:
-
Попытка получить разуказатель для nil.
-
Попытка получить доступ к выходящему за допустимые границы участку памяти (например, вызов move с неправильной длиной).
217 Unhandled exception occurred (Произошо неизвестное исключение)
Произошло исключение, и для него не существеет хэндла. Модуль sysutils устанавливает handler(менеджер), который отлавливает все исключения, и безопасно выходит в случае обнаружения оного.
219 Invalid typecast (Неправильное приведение типов)
Генерируется когда недопустимое приведение типов производится над классом используя оператор as. Эта ошибка также генерируется, когда объект или класс приводится к недопустимому объекту или классу, и виртуальный метод этого объекта или класса вызывается. Эта последняя ошибка детектируется только с использованием опции -CR компилятора.
227 Assertion failed error (Сбой утверждения)
Утверждение провалено, и процедурная переменная AssertErrorProc не была уcтановлена.
ИТ-записки Чорнага кашака
Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. Но это не точно. Как показала практика, для программы на Delphi это действительно не точно.
При открытии файла в режиме «только для чтения» в параметре определяющем режим доступа к файлу обычно передают комбинацию «fmOpenRead or fmShareDenyNone». Но оказалось, что это избавляет только от части ошибок «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом» или «The process cannot access the file because it is being used by another process».
Для начала немного теории. В Delphi режим доступа к файлу, определяется комбинацией константы режима открытия файла (fmOpen*) и константы разделения доступа к файлу (fmShare*). Эти константы описанны в модуле System.SysUtils. Приведу их значение для ОС Windows:
Наименование | Значение | Описание |
Режимы открытия файла | ||
fmOpenRead | $0000 | Открытие файла только для чтения |
fmOpenWrite | $0001 | Открытие файла только для записи |
fmOpenReadWrite | $0002 | Открытие файла для чтения и записи |
Режимы разделения доступа | ||
fmShareExclusive | $0010 | Другие приложения не имеют доступа к файлу |
fmShareDenyWrite | $0020 | Другие приложения могут только читать файл |
fmShareDenyRead | $0030 | Другие приложения могут только писать в файл |
fmShareDenyNone | $0040 | Другие приложения могут читать файл и писать в него |
Теперь перейдем к практике. Попробуем в режиме fmOpenRead открыть все файлы в каталоге для хранения временных файлов (там большая вероятность встретить файл, который занят какими-нибудь процессом).
Вариант 1. Откроем файлы без указания режима разделения доступа
У меня в каталоге для хранения временных файлов нашлось 23 файла, которые заняты какими-то процессами.
Вариант 2. Откроем файлы в режиме разделения доступа «fmShareDenyNone»
Теперь получаем 16 файлов занятых другими процессами и радуемся улучшению результата. Радуемся, но не долго. Некоторые из этих «занятых» файлов открываются на просмотр в «Lister» из Total Commander! Как так.
Процесс не может получить доступ к файлу
Когда файл занят каким-то процессом с ним не получится произвести никаких действий, ни изменить, ни удалить. Все дело в том, что система накладывает ограничения на выполнение редактирования файла, так как это, на самом деле, может нанести вред программному обеспечению. При таких обстоятельствах и возникает сообщение об ошибке, которое гласит: «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом». Подумав логически можно сделать вывод: чтобы открыть доступ этому самому процессу, надо освободить файл от другого процесса. А вот с этим сталкивался, наверное, каждый из нас и знает, что сделать это, чаще всего, гораздо сложнее, чем кажется изначально.
↑ Процесс не может получить доступ к файлу
Все из-за того, что с файлом может одновременно работать лишь одно приложение. В первую очередь это касается элементов системы предназначенных для перезаписи. Когда мы, например, играем в игру и файл с кэшем постоянно подвергнут обработке, система Windows накладывает ограничение. После этого редактировать, заменять, удалять и т.д. его уже не получается ровно до тех пор, пока процесс, который с ним работает, не будет завершён.
↑ Как же всё-таки удалить файл в ситуации, когда у процесса не получается обрести доступ?
Файл, который занят другим процессом будет загружен в оперативную память или открыт приложением. Зачастую хватает убрать его из оперативки и всех приложений. Файл перестанет использоваться каким-то процессом и его сразу можно будет отредактировать или удалить.
Чаще всего, проблема заключается в том, чтобы найти этот самый процесс, который использует определённый файл. Использовать ваш файл может какое угодно приложение. Если это, допустим, картинка, вы закрыли программу просмотра картинок и у вас получается удалить это изображение, то считайте вам повезло. Если же нет, то, возможно, придется лезть куда глубже.
↑ Как решить проблему?
1. Unlocker — программа, которая помогает как раз в таких случаях. Она сама находит процессы, которые заняты этим файлом и завершает их. Это можно сделать и без утилиты, только придётся искать в ручную и завершать, а утилита это делает автоматически. Скачав и установив программу, нужно всего лишь нажать ПКМ на файл и выбрать «Unlock»
2. Завершить вручную. Открываем диспетчер задач и разворачиваем список «Подробнее». Из всего большого списка, нужно выбрать только те, которые были запущены Вами. Например, для удаления файла с кэшем браузера, нужно закрыть все задачи браузера. Для этого кликаем правой кнопкой мыши и нажимаем «Завершить задачу».
3. Схитрить с установкой атрибутов. Нажать ПКМ на файл и зайти в свойства. Тут же на вкладке «Общие» поставить галочку напротив поля «Только чтение». Далее перезагрузить компьютер и возможность удаления может появиться.
4. Удалить в безопасном режиме. В безопасном режиме Windows загружает только основные программы нужны для работы системы. Все посторонние остаются отключены, что освобождает файлы от процессов. Для входа в безопасный режим нужно перезагрузить компьютер и во время перезагрузки нажать на клавишу F8 для того, чтобы выбрать вариант запуска системы. На некоторых ПК это может быть другая клавиша. Данный способ довольно часто срабатывает и удалить здесь можно почти любой файл, который не затрагивает работу Windows.
5. Снять защиту на запись. Защита может быть включена как программно, так и механически. Чаще всего это касается SD-карт. На них есть специальный тумблер, который блокирует запись. Программно это выключается через редактор реестра. Для этого нажимаем на Пуск правой кнопкой мыши, выбираем «Выполнить», вводим команду regedit и нажимаем «Ok». Далее нужно найти параметр WriteProtect и установить ему значение 0.
↑ Что делать, когда такая же проблема настигла в консоли или IIS?
Часто такая же проблема, когда процесс не может получить доступ, может выскочить при выполнении команды netsh в командной строке или при настройке сайта IIS. Тут может быть несколько причин:
1. Неправильная настройка реестра.
2. Попытка подключения к портам 80 и 443, когда они заняты.
3. Не хватает прав для выполнения действия.
А решить проблему можно так:
1. Запустить cmd от имени администратора. Сделать это можно в меню Пуск с помощью правой кнопки мыши.
2. Поменять пул IP-адресов. Выполнить команду netsh int ipv4 set dynamicport tcp start=10000 num=1000. Затем такую netsh int ipv4 set dynamicport udp start=10000 num=1000.
3. Удалить конфликт портов. От имени администратора запустить командную строку, прописать netstat -ano и посмотреть не заняты ли порты 80 и 443. Если порты свободны, то идём в реестр по пути:
Далее в cmd вводим net stop http и в параметре реестра ListenOnlyList нужно оставить одни 0.0.0.0. Далее опять в консоли пишем net start http. Если порты в итоге заняты, то их нужно или освободить или переопределить.
С помощью таких манипуляций можно справиться с ошибкой «Процесс не может получить доступ к файлу» и удалить файл.
Как исправить: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом
С ошибкой «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом» пользователи часто сталкиваются при попытке выполнить команду netsh или в процессе настройки сайта IIS. Узнаем, как ее исправить.
Причины ошибки
Если в ходе настройки сайта IIS или выполнения другого действия система неожиданно выбрасывает сообщение об ошибке, в котором указано, что процессу не удается получить доступ к файлу, то это может произойти по следующим причинам:
- Отсутствуют права администратора для запуска команды из консоли командной строки или PowerShell.
- Порт 80 или 443 используется другим процессом, что типично для компьютеров под управлением IIS (Internet Information Services).
- Неправильно настроен раздел реестра ListenOnlyList в оснастке IIS.
Запуск команды с доступом администратора
Если не удается выполнить команду netsh, скорее всего, ошибка возникает из-за отсутствия прав администратора. В большинстве случаев это происходит, когда пользователь пытается запустить команду, которая добавляет исключения в динамический диапазон портов для собственных приложений Windows или сторонних программ. Имейте в виду, что эта операция требует доступа администратора. Чтобы предоставить его, выполните следующие шаги.
С помощью системного поиска найдите командную строку и запустите ее с правами администратора. Если отобразится запрос контроля учетных записей (UAC), подтвердите его нажатием на кнопку «Да».
В командной строке выполните еще раз команду и проверьте, не прерывается ли ее запуск ошибкой «Процесс не может получить доступ к файлу, так как этот файл занят другим процессом»
Установка другого диапазона IP-адресов
Если не удалось решить конфликт DNS с помощью утилиты netsh, попробуйте использовать другой подход. По отзывам пользователей, проблема была разрешена после того, когда они установили совершенно другой диапазон IP-адресов вместо создания диапазона исключений. Этот способ подтвержден при разрешении конфликта между DNS и бухгалтерской программой Quickbooks.
В консоли командной строки с администраторскими правами запустите следующие команды:
- netsh int ipv4 set dynamicport tcp start=10000 num=1000
- netsh int ipv4 set dynamicport udp start=10000 num=1000
Если этот метод не применим к вашей ситуации, перейдите к следующему способу.
Разрешения конфликта портов IIS
Если столкнулись с ошибкой при правом щелчке мыши на элемент сайта внутри оснастки IIS MMC, попробуйте использовать утилиту Netstat.exe, чтобы узнать, занят ли порт 80 или 443 другим процессом. Эта проблема распространена на компьютерах под управлением Microsoft IIS 6.0 и 7.0. Основываясь на официальной документации Майкрософта, сообщение об ошибке появится в случае, если одно из следующих условий применимо к текущей ситуации:
- Параметр ListenOnlyList неправильно настроен на компьютере IIS.
- Другой процесс использует TCP-порт (80) или SSL-порт (443), требуемый IIS.
Для исправления ошибки сначала запустим утилиту Netstat.exe, чтобы определить, использует ли другой процесс указанные порты. Если они не заняты другим процессом, проверим раздел ListenOnlyList, правильно ли он настроен.
Откройте командную строку, предоставив ей доступ администратора, с помощью поисковой системы Windows. Для запуска утилиты Netstat.exe выполните команду:
При отображении результатов, прокрутите список активных подключений и проверьте, занятии ли порты 80и 443 другим процессом.
При их использовании отображаемая информация позволит определить причину ошибки. Для этого поищите в интернете конкретные шаги по разрешению конфликта в соответствии с PID-порта.
Если порты не используются, закройте командную строку и запустите Редактор реестра командой regedit из окна Win + R.
На левой панели навигации перейдите в следующее расположение:
Если по указанному пути ListenOnlyList отсутствует, не нужно его создавать, поскольку по умолчанию используется IP-адрес 0.0.0.0.
Перед редактированием раздела нужно становить службу HTTP, на которой работает IIS. Поэтому временно сверните редактор реестра, поскольку сейчас вернемся к нему.
Снова откройте командную строку с правами администратора.
В консоли выполните указанную команду, чтобы остановить службу HTTP, ответственную за запуск IIS:
Чтобы продолжить операцию, введите «Y» и нажмите на Enter. После успешного завершения закройте консоль и вернитесь в редактора реестра.
Перейдите на правую панель раздела ListenOnlyList и убедитесь, что он содержит допустимые IP-адреса. При обнаружении недопустимых адресов, удалите их.
Если присутствует адрес 0.0.0.0, нужно удалить все остальные IP-адреса. После закройте редактор и перезагрузите ПК.
После перезагрузки служба HTTP должна быть запущена автоматически. Если этого не произошло, в командной строке с доступом администратора выполните:
Если отобразится сообщение, что запрошенная служба уже запущена, следуйте далее.
Попробуйте запустить службу из оснастки IIS MMC. После этого больше не должны сталкиваться с ошибкой, когда процессу не удается получить доступ к файлу, поскольку файл занят другим процессом.