1

在系统帐户下运行的服务中,下面的代码挂在TMemIniFile.Create没有错误的情况下。如果我们用 TIniFile 替换它,它工作正常。
它是在 Windows Server 2012R2 下运行的 Delphi Tokyo 10.2.3 Win32 应用程序。没有对 INI 文件的并发访问。
这是我们第一次(第一个客户端)看到这个,它在许多机器上运行良好。

我不知道要进一步寻找什么。有任何想法吗?
它现在“有效”,因为我们切换到TIniFile,但我想找到原因。从我在这里读到的其他帖子TINIfile来看,似乎比 更挑剔TMemINIfile,我的情况正好相反。
INI 文件中没有特殊字符,它是使用 ASCII 编辑器创建的。

// This is set in the ServiceCreate:
FIniFileNaam := ChangeFileExt(ParamStr(0),'.INI'); 

// This is called from the ServiceStart:

procedure TTimetellServiceBase.LeesINI;
var lIniFile : TMemIniFile;
begin
   LogMessage(FIniFileNaam, EVENTLOG_INFORMATION_TYPE, cCatInfo, cReadINI);  // Logs to event log, we see this
   FStartDir := ExtractFilePath(ParamStr(0));

   if assigned(FLaunchThreadLijst) then FreeAndNil(FLaunchThreadLijst);
   FLaunchThreadLijst := TStringList.Create;
   try
      if FileExists(FIniFileNaam) then
      begin
         // Lees waarden uit INI file
         lIniFile := TMemIniFile.Create(FIniFileNaam);  // This is the call that hangs. The service is unresponsive now.
         try
            FLaunchThreadLijst.CommaText := lIniFile.ReadString(INISECTIE_SERVICETASKS,'RunIniFiles','');
            FMaxTaskDuration := lIniFile.ReadInteger(INISECTIE_SERVICETASKS,'MaxTaskDuration',FMaxTaskDuration);
         finally
            FreeAndNil(lIniFile);
         end;
      end;

   finally
      if (FLaunchThreadLijst.Count = 0) and FileExists(FStartDir + FExeName) then
         FLaunchThreadLijst.Add(SDEFAULTTHREADNAME);
      LogMessage(Format('FLaunchThreadLijst.CommaText: %s (%d items)',[FLaunchThreadLijst.CommaText,FLaunchThreadLijst.Count]), EVENTLOG_INFORMATION_TYPE, cCatInfo, cLaunchList);
   end;
end;

FWIW、INI 文件内容:

[TASKMANAGER]
RunIniFiles=TTTasks.ini
MaxTaskDuration=2
RestartIniFiles=
KillIniFiles=
4

0 回答 0