In 2014 Microsoft released a Windows Update that caused quite a problem for Delphi developers still using Delphi 2006 to 2010. When starting a second instance of the IDE they now get the error
Cannot create file C:\Users\Admin\AppData\Local\Temp\EditorLineEnds.ttr
The update in question is a security update for all supported Windows versions and has the number KB2982791. It prevents the file EditorLineEnds.ttr to be created/overwritten because that file is a Truetype font and changing it while it is active is apparently a security risk.
Unfortunately this prevents a meaningful use of these Delphi versions. So what can we do?
There is this question on StackOverflow from which I got the above information. As far as I know there are the following workarounds:
- Uninstall the Windows update KB2982791, which might not be such a good idea. After all it’s a security update. Daniel Magin blogged about this.
- Use Andreas Hausladen’s IdeFixpack (Delphi 2007 version, beware that version 4.4 does not work under Windows 8, version 4.3 seems to work), (for later Delphi versions). Note that the editor option Show Lineends will use a different character if you use this fix because the IDE won’t load the EditorLineEnds.ttr font any more.
- Rename the file every time you want to start Delphi. This is what I will be writing more about.
Of course you don’t want to rename the file by hand every time you start Delphi. So either, you use a batch file to do that for you (see Daniel Magin’s post), or you use the program I wrote for this particular task.
It’s called dzEditorLineEndsFix and is a Tray Icon application that uses FindFirstChangeNotification / FindNextChangeNotification (I always wanted to use these API functions but never had an appropriate use case.) to detect when the file is being created and then moves it to its own unique subdirectory under %temp%.
Since the file is still in use, even when the IDE has been closed, the program cannot delete it and the directories that contain it. So, in order to not leave lots of garbage in the temp directory, I changed version 1.02 to use a subdirectory in %temp% which it tries to delete and recreate very time it gets started. This should solve that issue.
- 1.0.3 removed ballon hint on startup
- 1.0.2 Use subdirectory dzEditorLineEndsFix
- 1.0.1 Bugfix: wait for 200 ms for Delphi opening the file before moving it
- 1.0.0 initial version