我已经开发了一个在IIS上使用RAD Server的应用程序。到目前为止,我已经成功创建了服务器和客户端应用程序。该应用程序提供了一些信息,需要根据服务器端的MSSQL数据库进行验证。在我的FDConnection组件中设置了数据库连接参数后,在测试环境中一切正常。
但是,我想通过在访问服务器时读取ini文件来更改连接参数。
在我的开发系统上,我可以将ini文件放在bpl输出所位于的目录中。 (即C:\ Users \ Username \ Projects \ Application \ Server \ Win32 \ Debug)。然后,服务器会正确读取ini文件并更新组件参数。
我已经根据RAD Server文档在服务器上创建了目录,并将所需的EMS文件放置在该目录中。 (即:C:\ inetpub \ RADServer \ EMSServer)由于这是emsserver.ini文件所在的位置,因此我认为这是放置ini文件的正确位置。如果从此目录启动EMSDevServer.exe,则会正确读取ini文件,并更新FDConnection参数。
但是,当我使用ISAPI dll通过IIS启动RAD Server时,由于数据库连接失败,因此似乎找不到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 Server中设置数据库连接的更好方法吗?如果有我可以访问的变量,也许我可以将参数放在emsserver.ini中。
答案 0 :(得分:1)
太晚了,还在发布答案。
System.SysUtils 中的函数在这里会有帮助。
以下函数调用将为您提供 .bpl 文件所在目录的路径。
ExtractFilePath(GetModuleName(HInstance));
将 ini 与 .bpl 文件一起放置,将上述函数的结果与 Ini 文件名结合将有助于您定位 ini。
答案 1 :(得分:0)
@nolaspeaker-我会为您提供答案,但您只发表了评论。您的回复促使我找到一种确定所使用路径的方法。因此,我将path变量的值写入了已知的文本文件。
Path := GetCurrentDir;
AssignFile(F, 'C:\Temp\Data.txt');
Rewrite(F);
WriteLn(F, Path);
CloseFile(F);
正在使用的路径是'C:\ Windows \ SysWOW64 \ inetsrv';
我将Config.ini文件移动到了该目录,并且找到并正确读取了它。
感谢您的答复。