1

我开发了一个通过 IIS 使用 RAD 服务器的应用程序。到目前为止,我已经成功创建了我的服务器和客户端应用程序。该应用程序提供了一些需要根据服务器端的 MSSQL 数据库进行验证的信息。在测试环境中一切正常,因为我的数据库连接参数是在我的 FDConnection 组件中设置的。

但是,我想通过在访问服务器时读取 ini 文件来更改连接参数。

在我的开发系统上,我可以将 ini 文件放在我的 bpl 输出所在的目录中。(即 C:\Users\Username\Projects\Application\Server\Win32\Debug)。然后服务器正确读取 ini 文件并更新组件参数。

我已根据 RAD 服务器文档在服务器上创建了目录,并将所需的 EMS 文件放在目录中。(即:C:\inetpub\RADServer\EMSServer) 因为这是 emsserver.ini 文件所在的位置,所以我认为这是放置我的 ini 文件的正确位置。如果我从这个目录启动 EMSDevServer.exe,ini 文件会被正确读取并且 FDConnection 参数会被更新。

但是,当我使用 ISAPI dll 通过 IIS 启动 RAD 服务器时,由于我的数据库连接失败,似乎找不到 ini 文件。

我尝试将 ini 文件放在 C:\Users\Public\Documents\Embarcadero\EMS 目录中,但这也不起作用。

以下是我访问在 DataModuleCreate 上调用的 ini 文件的代码。

procedure TdmSecurity.DataModuleCreate(Sender: TObject);
begin
  SetConnectionStr(FDConnectionSTIKS);
end;

procedure SetConnectionStr(var FDConnectionSTIKS: TFDConnection);
var ConfigIni: TInifile;
    DBServerName, DBName, Path: string;
begin
  Path := GetCurrentDir;
  ConfigIni := TIniFile.Create(System.IOUtils.TPath.Combine(Path, 'Config.ini'));
//  ConfigIni := TIniFile.Create(System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetDocumentsPath, 'Config.ini'));
//  ConfigIni := TIniFile.Create('C:\Users\leonard\Projects\LumberNowEMS\Server\Win32\Debug\config.ini');
  DBServerName := ConfigIni.ReadString(AppNode, 'ServerName', 'ZEUS');
  DBName := ConfigIni.ReadString(AppNode, 'DataBase', 'NOTHING');

//  showmessage(configini.FileName);


  with FDConnectionSTIKS.Params as TFDPhysMSSQLConnectionDefParams do
  begin
    DriverID := 'MSSQL';
    Server := DBServerName;
    Database := DBName;
    UserName := DBUserID;
    Password := DBPassword;
  end;

  ConfigIni.Free;

//  showmessage(Path + '; DBName:' +DBName);
//  Result := Format('DriverID=MSSQL;Server=%s;Database=%s;User_name=%s;Password=%s', [DBServerName, DBName, DBUserID, DBPassword]);
end;

我预计 IIS 会从同一个地方读取 ini 文件,但似乎并非如此。有人能告诉我应该把 ini 文件放在哪里,以便 IIS 可以正确访问它,或者可能是在 Rad 服务器中设置数据库连接的更好方法吗?如果有我可以访问的变量,也许我可以将我的参数放在 emsserver.ini 中。

4

2 回答 2

1

很晚了,仍然发布答案。

System.SysUtils 中的函数在这里会很有帮助。

以下函数调用将为您提供 .bpl 文件所在目录的路径。

ExtractFilePath(GetModuleName(HInstance));

将 ini 与 .bpl 文件一起放置,将上述函数的结果与 Ini 文件名相结合将帮助您定位 ini。

于 2021-05-28T13:36:00.767 回答
1

@nolaspeaker - 我会给你答案,但你只发表了评论。您的回复促使我找到一种方法来确定正在使用的路径。所以我将路径变量的值写入了一个已知的文本文件。

Path := GetCurrentDir;
AssignFile(F, 'C:\Temp\Data.txt');
Rewrite(F);
WriteLn(F, Path);
CloseFile(F);

正在使用的路径是 'C:\Windows\SysWOW64\inetsrv';

我将我的 Config.ini 文件移到了这个目录,并且找到并正确读取了它。

感谢您的回复。

于 2019-07-19T14:03:28.433 回答