Delphi 2006-2010错误:"无法创建文件C:\ Users \ Admin \ AppData \ Local \ Temp \ EditorLineEnds.ttr"

56
安装Delphi 2007后(注:此问题适用于从2006到2010的所有Delphi版本),我遇到了一个错误,我无法找出原因,并且以前从未见过。在重新启动计算机后,我可以正常启动程序,但是如果我关闭程序并重新启动,它将给出以下错误信息:
“无法创建文件C:\ Users \ Admin \ AppData \ Local \ Temp \ EditorLineEnds.ttr”。由于该文件正在被另一进程使用,因此无法访问该文件。”
“System”对该文件有一个处理句柄,除非重新启动计算机,否则无法清除。在启动程序之前,我还可以通过将文件重命名来解决该问题。
我已经尝试重新安装程序,但没有成功。
安装的版本:CodeGear™ Delphi® 2007 for Win32® R2 Version 11.0.2902.10471。 操作系统:Windows 7 Pro 64bit
更新08/14 13:35 EDT 尝试了以下解决方案,但仍然存在相同的文件锁定问题:
重命名Temp目录为我知道拥有完全安全权限的目录。当启动Delphi时,文件将在此目录中创建,但EditorLineEnds.ttr仍将被SYSTEM锁定,导致我无法重新启动。 卸载了以下安全更新KB2982791和KB2976897,但这并没有解决问题。我现在已禁止Windows更新,并尝试卸载8/13的所有安全补丁。 完全卸载Delphi并重新安装。在重新安装所有内容后,问题仍然存在。
我将尝试从头开始重新安装Windows并在Windows更新之前安装Delphi,以查看更新是否真正是原因。我现在的解决方法只是在启动Delphi之前重命名EditorLineEnds.ttr。

你是如何运行程序的?以管理员身份运行吗?你是否已经登录为名为“Admin”的用户?这似乎很奇怪。 - David Heffernan
Jeroen提供的信息表明(请跟随链接到QC),您可能有一个额外的BDS进程正在运行。 - Sertac Akyuz
我曾经遇到过同样的问题。请参考微软支持网站http://support.microsoft.com/kb/2982791。 - user3939195
@SertacAkyuz - 我们确保使用任务管理器没有其他BDS的实例在运行。 - M Schenkel
6
你尝试过使用Delphi 2007的IDEFixPack吗?(tinyurl.com/p9rt9ta) 自版本2.7开始,它有一个补丁可以防止IDE加载字体文件。IDE仍会创建临时文件但不会锁定它。如果在尝试IDEFixPack之前该文件已被锁定,则必须重新启动电脑。 - Andreas Hausladen
@AndreasHausladen - 这解决了它。 - M Schenkel
10个回答

44

我知道有三种解决方法:

  1. 尝试卸载Windows安全更新KB2982791,如Francisco Caffagni所提到的。这对我解决了问题(Windows 8.1 + Delphi 2007),但卸载Windows安全更新可能不是一个好主意。
  2. 每次启动Delphi时都重命名该文件。下面有一个简单的程序可以为您完成此操作。
  3. 使用Andreas Hausladen的IdeFixpack(Delphi 2007版,请注意版本4.4在Windows 8下不可用,版本4.3似乎可以使用),(后续Delphi版本)请注意,如果使用此修复程序,编辑器选项“显示行结束符”将使用不同的字符,因为IDE将不再加载EditorLineEnds.ttr字体。(解决方案1和2没有这个缺点,但是谁会使用那个选项呢?)

注意:微软在几天后撤回了此修复程序,并于2014年8月27日发布了新的修复程序KB2984615。很遗憾,这对我来说没有解决问题。也许先卸载KB2982791,然后再安装KB2984615可能会起作用,但我没有尝试过。

我写了一个简单的程序,可以解决我的问题:

它使用FindFirstChangeNotification / FindNextChangeNotification检查该文件是否存在,如果存在,则将其移动到%temp%中的唯一子目录中。

二进制下载

源代码可在SourceForge下载。


1
现在有一个 KB2993651 取代了 KB2982791。如果有人知道这是否也会导致问题,请更新此答案。 - Jan Doggen
@JanDoggen 是的。更新KB2993651再次触发了这个问题。我现在在Windows 7上使用Delphi 2007也遇到了同样的问题(顺便说一句,这是我第一次遇到)。IdeFixPack对我来说没有修复这个问题,但是卸载KB2993651可以解决它。 - GolezTrol
好的,这很奇怪。我卸载了更新后问题消失了。然后重新安装它来测试@dummzeuch的工具是否也能解决问题,但是在我重新安装更新后,问题再也没有出现过。所以,目前的结论是:卸载和重新安装更新可以解决这个问题?:-S - GolezTrol
我也遇到了同样的问题,但我必须重新启动电脑才能删除文件(注销或Unlocker应用程序都无法工作)。 - kokbira
我在遇到这个问题时没有安装KB2982791,但是有安装KB2993651。我已经卸载了它,但问题仍然存在。我使用Win7和Delphi 2007(试用版)。 - Yevgeniy Afanasyev

6
这是我的bds_start.bat脚本,运行于Win7-64位系统上的Delphi2006。我根据GabeMeister的答案和在一个链接中找到的类似脚本进行了自定义。现在,我可以在不重启计算机的情况下重新启动DelphiIDE。所有ttr临时文件仍然被系统锁定,所以del命令可能无法起作用。它们可以在系统重新启动后删除。
然而,双击myproject.dpr项目文件无法重新启动Delphi。我不敢安装IDEFixPack,因为其中一个评论没有承诺其可以正常工作。 bds_start.bat
@REM http://www.danielmagin.de/blog/index.php/2014/08/windows-update-disable-delphi-2007-2010/
@REM https://dev59.com/WF8e5IYBdhLWcg3w2dYD
@REM http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/idecommandline_xml.html

@REM del files created by DelphiIDE, may not able to delete but
@REM moving to a new name is possible. Use unique name by timestamp.
del "%temp%\EditorLineEnds*.ttr"
set dt=%date%_%time:~3,2%-%time:~6,2%
rename "%temp%\EditorLineEnds.ttr" "EditorLineEnds_%dt%.ttr"
start "" "C:\Borland\BDS\4.0\Bin\bds.exe" -pDelphi

将CBuilder更改参数为-pCBuilder。也许最好的解决方法是创建bds.exe替换工具,删除/移动*.ttr文件,运行并通过cmd参数传递给原始的bds_original.exe文件。这应该可以实现*.dpr双击重新启动。或者使用BdsLauncher.exe,我认为它与*.dpr扩展名链接到regedit。然后进程列表中有bds.exe名称。


目前看起来它能够正常运行。如果我在完成项目时没有遇到任何问题,我会在这里写下,将其用作简单好用的解决方案。还有一个可能愚蠢的问题:你确定这个问题对最终发布的项目没有任何不利影响吗?谢谢。 - QMaster

3

对于Delphi 2007,安装IDEFixPack 4.4并将以下环境变量添加到系统设置中:

IDEFixPack.DisabledPatches=DotNet.GlobalizationSearch

重新启动计算机,应该就可以正常工作了。我有两台Win 8.1 Pro的桌面电脑,它们都能够完美运行!


没有重启就对我起作用了 :) - Anton Duzenko

3

以下是来自http://www.danielmagin.de/blog/index.php/2014/08/windows-update-disable-delphi-2007-2010/的另一种解决方法:

引用:

你可以通过两种简单的方式回滚:

1:创建一个批处理文件,包含以下内容:
wusa /uninstall /kb:2982791
wusa /uninstall /kb:2970228
在Windows启动时运行这个批处理文件。但是,如果开启自动更新,每次都会安装这两个更新。

2:禁用自动更新中的这两个更新
更新后进入你的系统中的Windows更新。禁用这两个KB,这样在新的更新中就不会再次安装了。


卸载并永久禁用Windows安全更新可能不是最佳选择。但这比完全无法工作要好。 - dummzeuch

2
如果您使用的是Windows操作系统,我制作了一个批处理文件快捷方式来启动Delphi。基本上它是一个批处理文件,将“EditorLineEnds.ttr”文件重命名为当前日期时间,并将其移动到另一个子文件夹中,然后启动Delphi。
以下是我的批处理脚本内容:
SET HOUR=%time:~0,2%
SET dtStamp9=%date:~-4%%date:~4,2%%date:~7,2%_0%time:~1,1%%time:~3,2%%time:~6,2% 
SET dtStamp24=%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%

if "%HOUR:~0,1%" == " " (SET dtStamp=%dtStamp9%) else (SET dtStamp=%dtStamp24%)

if exist "C:\Users\<username here>\AppData\Local\Temp\EditorLineEnds.ttr" (
  echo "Moving EditorLineEnds.ttr"
  MOVE "C:\Users\<username here>\AppData\Local\Temp\EditorLineEnds.ttr" "C:\Users\<username here>\AppData\Local\Temp\ExtraEditorLineEnds\%dtStamp%.ttr"
) else (
  echo "EditorLineEnds.ttr was not found."
)
start "C:\Program Files (x86)\CodeGear\RAD Studio\6.0\bin\bds.exe"

值得1分,但为了更好的编辑解决方案,请参考@Whome的答案。 - QMaster

2
只是想指出,微软已经撤回了KB2982791更新。引用的原因似乎是字体渲染和系统崩溃问题,而不是这个特定问题,表面上看起来是Delphi的错误,并且仅仅被更新加剧了。
Microsoft网站上的KB文章已经更新:http://support.microsoft.com/kb/2982791 具体来说,以下部分是有关的:
已知问题2:微软正在调查以下更新安装后字体无法正确渲染的行为:
2982791 MS14-045: 用于内核模式驱动程序的安全更新的描述:2014年8月12日
2970228 更新以支持在Windows中的俄罗斯卢布新货币符号
2975719 Windows RT 8.1、Windows 8.1和Windows Server 2012 R2的2014年8月更新累积包
2975331 Windows RT、Windows 8和Windows Server 2012的2014年8月更新累积包
状态:微软已删除这些更新的下载链接,同时正在调查这些问题。
已知问题3:微软正在调查以下更新安装后系统可能会崩溃并显示0x50停止错误(bugcheck)的行为:
2982791 MS14-045: 用于内核模式驱动程序的安全更新的描述:2014年8月12日
2970228 更新以支持在Windows中的俄罗斯卢布新货币符号
2975719 Windows RT 8.1、Windows 8.1和Windows Server 2012 R2的2014年8月更新累积包
2975331 Windows RT、Windows 8和Windows Server 2012的2014年8月更新累积包
此情况可能是持续性的,并可能阻止系统正确启动。
状态:微软已删除这些更新的下载链接,同时正在调查这些问题。

似乎更新更近的KB2993651现在也引起了同样的问题:http://support.microsoft.com/kb/2993651 - Toby Groves

1

dzEditorLineEndsFix - 无法创建文件 %Temp%\EditorLineEnd.ttr

这是一个小程序,用于修复Windows更新KB2982791与Delphi 2006至2010之间引入的问题,该问题会导致错误“无法创建文件%Temp%\EditorLineEnds.ttr”。 它通过在创建文件时将文件移动到其自己的唯一子目录来解决此问题。


1

同样适用于在Windows 7上使用的CodeGear Delphi 2009

卸载Windows更新2982791 2970228并不能解决问题。

之后使用IDE Fix Pack将有所帮助。


1
问题似乎与安装在8月13日的Windows更新有关。 我尝试卸载KB2982791,如前面的帖子所建议的,但这并没有解决问题。 然而,卸载所有自8月13日以来的Windows更新确实解决了问题。

0

我正在使用Windows 8,而不是8.1

我关闭了所有Windows更新,昨天检查更新并安装了所有安全更新。今天我有同样的问题,但上述任何更新都没有安装在我的笔记本电脑上。 我查找了所有这些更新,但在已安装的安全更新中没有找到任何一个:

KB2982791、KB2970228、KB2975719、KB2975331

但我找到了另一个更新 KB2993651 并尝试卸载它,但卸载过程被停止了。我重置了电脑。现在我找不到这个更新,问题也没有解决。

所以我没有找到其他的解决办法,并创建了以下脚本,在打开RAD 2010之前运行。

cd %temp%
ren EditorLineEnds.ttr EditorLineEnds%RANDOM%.ttr

我正在使用%RANDOM%函数,因为第二次重命名时固定名称的文件也将被锁定,脚本将无法成功重命名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接