TMemIniFile.Create在ServiceStart

时间:2018-04-17 12:41:34

标签: delphi service delphi-10.2-tokyo tinifile

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

我不知道该寻找什么。任何想法?
它现在“有效”,因为我们切换到TIniFile,但我想找到原因。从other posts我在这里看到,TINIfile似乎比TMemINIfile更挑剔,我的情况正好相反。
INI文件中没有special characters,它是使用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=

0 个答案:

没有答案